通过编写dockerfile部署python项目

docker命令总览

在这里插入图片描述

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

# 创建镜像(进入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"]
  • 19
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
可以按照以下步骤来构建Python镜像并安装相应的包: 1. 首先,在你的项目目录下创建一个名为 `Dockerfile` 的文件。 2. 在 `Dockerfile` 中指定基础镜像。例如,使用官方的 Python 3.8 镜像:`FROM python:3.8` 3. 安装你需要的包。可以使用 `RUN` 命令来运行安装命令。例如,安装 Flask 和 numpy 包:`RUN pip install Flask numpy` 4. 将你的项目代码复制到容器中。可以使用 `COPY` 命令来复制文件。例如,复制当前目录下的所有文件到容器的 `/app` 目录下:`COPY . /app` 5. 设置容器的工作目录。可以使用 `WORKDIR` 命令来设置工作目录。例如,设置容器的工作目录为 `/app`:`WORKDIR /app` 6. 暴露容器的端口。可以使用 `EXPOSE` 命令来暴露端口。例如,暴露容器的端口为 `5000`:`EXPOSE 5000` 7. 指定容器启动时要运行的命令。可以使用 `CMD` 命令来指定启动命令。例如,启动 Flask 应用:`CMD ["python", "app.py"]` 下面是一个示例的 `Dockerfile` 文件: ``` FROM python:3.8 RUN pip install Flask numpy COPY . /app WORKDIR /app EXPOSE 5000 CMD ["python", "app.py"] ``` 在项目目录下运行以下命令来构建镜像: ``` docker build -t my-python-app . ``` 这将会构建一个名为 `my-python-app` 的镜像。你可以使用以下命令来运行该镜像: ``` docker run -p 5000:5000 my-python-app ``` 这将会启动容器,并将容器的端口 `5000` 映射到主机的端口 `5000`。你可以通过访问 `http://localhost:5000` 来访问你的应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

现实、狠残酷

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值