简单版:(一次成功,后续下载对应的软件依赖)
方便运维、麻烦研发!
现有项目如下:

已经压缩成tar包,需要制作成容器镜像
如何操作?
第一步:肯定是构建dockerfile,如下:
from python:3.12.4 ##基于什么版本的python,取决于你的环境,可以pip检测一下 label maintainer="laohu" ##命名标签 run mkdir -p /prediction_service_revised ##创建容器内的工作目录 copy miniconda3-latest-linux-x86_64.sh /prediction_service_revised ##将自己构建所需要的工具复制到工作目录中 add ./prediction_service_revised.tar.gz /prediction_service_revised #将python包导入到容器 workdir /prediction_service_revised ##定义工作目录 cmd ["python"] ##命令使用
第二步,构建镜像
docker build -t prediction_service_revised:v1 .
等待构建,构建完成!
docker images
此方法,构建快,但是完全为基础镜像,任何python所需要的库都没有,需要研发自行下载!

可查看构建缓存(只有镜像占用的位置,这里我删除了,所以不显示!)
docker system df 或者 docker system df -v

复杂版:(构建多次,依赖包下载依赖于选择的库地址,构建缓存较大)
方便研发、麻烦运维!
依旧是之前的项目
第一步:在工作目录终端,使用pip freeze > requirements.txt 命令将项目依赖库进行导出。
(生成需要的依赖库环境包)
命令执行完成后会生成一个叫requirements.txt的文件
pip freeze > requirements.txt
这些依赖包并不能一次性下载完成,构建镜像时,若构建不成功,则会产生构建缓存,占空间!
第二步:构建dockerfile
from python:3.12.4 label maintainer="laohu' run apt-get update && apt-get install -y build-essential run mkdir -p /prediction_service_revised copy requirements.txt /prediction_service_revised add ./prediction_service_revised.tar.gz /prediction_service_revised workdir /prediction_service_revised run pip install --upgrade pip -i https://mirrors.aliyun.com/pypi/simple/ run pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/ cmd ["python"]

第三步,构建镜像
docker build -t prediction_service_revised:v1 .
出现下列之类的问题,就是下载对应的pip依赖库失败,需要根据问题响应,依次解决依赖库问题,直至构建成功!

例:

构建成功:

构建缓存如下:
docker system df 或者 docker system df -v

那么问题来了,如何清理这些缓存?
# 删除未使用的构建缓存 docker builder prune # 更彻底,删除所有缓存,包括可能还会用到的 docker builder prune --all docker builder prune --all 清理构建缓存 docker container prune 清理没用的容器 docker image prune 清理悬空镜像 docker volume prune 清理没用的卷 docker network prune 清理没用的网络 docker system prune -a --volumes 一键清理
一键清理如果你只是做实验,对数据不敏感,可以直接:
docker system prune -a --volumes
这会删除所有:
已停止的容器
没有 tag 的镜像
没用的卷
没用的网络
构建缓存
空间释放得最快,但要注意数据卷和缓存一旦清理,就无法恢复。
更深入的检查有时候你清理完,空间还是很大,可以直接查看 /var/lib/docker 下哪些目录占用:
sudo du -h --max-depth=1 /var/lib/docker | sort -h
常见大户:
overlay2/:镜像和容器的文件系统
volumes/:卷的数据
buildkit/:构建缓存
如果 build kit 特别大,就说明问题出在构建缓存。
到此这篇关于python项目打包成docker容器镜像的两种方法实现的文章就介绍到这了,更多相关python打包成docker镜像内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论