0


通过编写dockerfile部署python项目

docker命令总览

在这里插入图片描述

docker通过dockerfile构建镜像常用命令

# 创建镜像(进入dockerfile所在的路径)docker build -t my_image:1.0 .# 查看镜像docker images

# 创建容器docker run -dit--restart=always -p9700:9700 --name my_container my_image:1.0 

# 查看容器dockerps-a# 进入容器dockerexec-it my_container /bin/bash

# 退出容器exit# 暂停容器docker stop my_container 

# 删除容器dockerrm my_container 

dockerfile编写

# 使用官方的Python运行时作为父镜像
FROM python:3.10
# 设置工作目录为/app
WORKDIR /app
# 将当前目录内容复制到位于 /app 的容器中
COPY . /app
# 安装任何需要的包
RUN pip install torch-2.0.0+cpu-cp310-cp310-linux_x86_64.whl
RUN pip install torchvision-0.15.1+cpu-cp310-cp310-linux_x86_64.whl
RUN pip install --no-cache-dir -r requirements_new.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
# RUN pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple# 将/etc/localtime链接到上海时区文件
RUN ln-sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# 对外暴露的端口号
EXPOSE 9700# 定义环境变量
ENV model = gpt-4-vision-preview
# 当容器启动时运行python app.py
CMD ["python", "app.py"]

dockerfile中COPY与ADD的区别

在 Dockerfile 中,COPY 和 ADD 指令都用于将文件或目录从构建上下文复制到镜像中,但它们之间有一些重要的区别:

1.基本功能:

  • COPY:将本地文件或目录复制到镜像中。
  • ADD:将本地文件、目录或远程文件 URL 的内容复制到镜像中。如果源文件是一个 URL,并且目标文件不存在,则 ADD 指令还会下载和解压 URL 指向的文件(如果它是压缩的)。

2.对压缩文件的处理:

  • COPY:不会处理压缩文件,如果源文件是一个 .tar、.gz 或其他压缩格式的文件,它将被复制到镜像中,但不会解压。
  • ADD:如果源文件是一个压缩文件(如 .tar、.tar.gz、.tgz、.bz2、.xz 等),则 ADD 指令会自动解压该文件到目标目录(如果指定了的话)。

3.构建缓存:

  • COPY 和 ADD 都会受益于 Docker 的构建缓存。但是,由于 ADD 会处理 URL 和解压文件,因此它可能更难以有效地使用缓存。如果远程文件的内容更改,或者压缩文件的内容更改,即使解压后的内容没有更改,ADD 也可能导致缓存失效。

4.最佳实践:

通常,推荐使用 COPY 指令,因为它更直观、更简单,并且更容易理解。当需要复制本地文件或目录到镜像时,COPY 是首选。
如果需要从远程 URL 下载文件,或者需要解压压缩文件到镜像中,可以使用 ADD 指令。但是,请注意 ADD 的一些潜在问题,如缓存失效和不必要的复杂性。

5.安全性:

  • 使用 ADD 从远程 URL 下载文件可能会引入安全风险,因为远程文件的内容可能不受控制。如果可能,最好从受信任的源下载文件,并使用 COPY 指令将文件复制到镜像中。

6.目标路径:

  • 对于 COPY 和 ADD,如果目标路径不存在,Docker 将尝试创建它。但是,如果目标路径是一个文件而不是目录,并且该文件已经存在,则操作将失败。

总结:在 Dockerfile 中,应优先考虑使用 COPY 指令来复制本地文件或目录到镜像中。只有在需要特定功能(如从远程 URL 下载文件或解压压缩文件)时,才使用 ADD 指令。

将容器转化为镜像和镜像压缩解压

# 将容器转化为镜像docker commit my_container  my_image:1.2

# 将镜像转为压缩包docker save -o my_package.tar my_image:1.2

# 删除原镜像docker rmi my_image:1.2

# 将压缩包解压得到镜像docker load –i my_package.tar

将镜像推送到私有仓库

# 标记镜像docker tag logistics_park:base 10.82.27.215:10081/ai_platform/logistics_park:base

# 将镜像推送到私有仓库docker push 10.82.27.215:10081/ai_platform/logistics_park:base

根据基础镜像创建docker容器

docker pull python:3.10
# 创建容器不进入docker run -dit--name=p1 python:3.10
# 进入容器dockerexec-it p1 bash# 创建文件夹mkdir app
# 推出容器exit# 将需要的依赖拷贝到镜像指定目录dockercp torchvision-0.15.1+cpu-cp310-cp310-linux_x86_64.whl p1:app/
# 升级pip
pip3 install--upgrade pip

# 安装需要的依赖(加上镜像源)
pip install-r requirements_new.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
# 退出容器exit# 将容器打包为镜像(确保容器正在运行)docker commit p1 logistics_park:base
# 标记镜像docker tag logistics_park:base 10.82.27.215:10081/ai_platform/logistics_park:base
# 将镜像推送到私有仓库docker push 10.82.27.215:10081/ai_platform/logistics_park:base
# 构建镜像docker build -t logistics_park:v1.0 .# 容器运行命令:docker run -dit--restart=always -p9700:9700 --name logistics_park logistics_park:v1.0

通过基础镜像创建容器的dockefile

# 使用官方的Python运行时作为父镜像
FROM 10.82.27.215:10081/ai_platform/logistics_park:base
# 设置工作目录为/app
WORKDIR /app
# 将当前目录内容复制到位于 /app 的容器中
COPY . /app
# 将/etc/localtime链接到上海时区文件
RUN ln-sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# 验证时区
RUN date# 对外暴露的端口号
EXPOSE 9700# 定义环境变量# ENV model = gpt-4-vision-preview# 当容器启动时运行python app.py
CMD ["python", "app.py"]
标签: docker

本文转载自: https://blog.csdn.net/qq_34184505/article/details/138525237
版权归原作者 现实、狠残酷 所有, 如有侵权,请联系我们删除。

“通过编写dockerfile部署python项目”的评论:

还没有评论