通过编写dockerfile部署python项目

现实、狠残酷 2024-07-22 16:07:03 阅读 52

docker命令总览

在这里插入图片描述

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

<code># 创建镜像(进入dockerfile所在的路径)

docker build -t my_image:1.0 .

# 查看镜像

docker images

# 创建容器

docker run -dit --restart=always -p 9700:9700 --name my_container my_image:1.0

# 查看容器

docker ps -a

# 进入容器

docker exec -it my_container /bin/bash

# 退出容器

exit

# 暂停容器

docker stop my_container

# 删除容器

docker rm 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

# 进入容器

docker exec -it p1 bash

# 创建文件夹

mkdir app

# 推出容器

exit

# 将需要的依赖拷贝到镜像指定目录

docker cp 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 -p 9700: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"]



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。