python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > python打包成docker镜像

python项目打包成docker容器镜像的两种方法实现

作者:云隐智者

本文介绍两种将Python项目打包为Docker镜像的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

简单版:(一次成功,后续下载对应的软件依赖)

方便运维、麻烦研发!

现有项目如下:

已经压缩成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镜像内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文