pythondocker
‘壹’ python教程:使用Docker打包Python应用
采用Docker来打包Python应用,相较于Python虚拟环境,其隔离性更高,但低于虚拟机。在选择不同的隔离程度时,工程师需要综合考虑以下因素。至于选用Python虚拟环境、Docker、虚拟机或其他打包方式,需工程师自行评估。
以下以一个最小应用为例,展示Docker打包的过程。本文的开发环境为Ubuntu 22.04,其他操作系统的步骤大致相同。
准备环境,即安装Docker和相关工具。
安装完成后,可以查看版本信息。
对于Docker引擎23.0之后的版本,还需要安装一个buildx。这是因为从该版本开始,Docker构建镜像的方式有所变化,但运行镜像的语法不变。
运行一个hello-world容器,以验证安装是否成功。
如果拉取镜像失败,可能是网络无法访问Docker Hub镜像仓库的问题,可以配置国内镜像仓库代理来解决,此处不详细说明,假设问题已解决。
对于Python应用,需要py代码文件和依赖描述文件requirements.txt。以一个单文件应用为例,代码文件夹内容如下:
其中app.py是一个简单的HTTP服务端应用:
requirements.txt中列出了该应用的依赖,因为本应用无外部依赖,所以该文件为空。
准备好应用后,先在本地进行测试,确保无误后再进行打包。
新建一个镜像构建文件Dockerfile,通常放在当前目录,取名为Dockerfile。以下是一个Dockerfile的示例内容:
构建镜像的过程可以理解为选择一个基础镜像,进行相应改动,再保存下一个瞬时状态,以确保每次启动都能反映当时的状态。上述内容包括:
使用以下命令行进行构建:
构建成功后,可以查看验证一下:
可以看到该镜像大小为400多MB,对于我们简单的单文件应用来说还是比较大的。这是为了隔离度而付出的开销。可以通过以下两个思路来缩减镜像尺寸:
将Dockerfile的内容修改如下,再次构建出两个镜像app2和app3:
Dockerfile for app2:
Dockerfile for app3:
再次查看一下:
可以看到当基础镜像为python:3.10-slim时,镜像大小变成了135MB。还有一些更轻量级的基础镜像,读者可以自行测试。
镜像运行的实质是将镜像实例化成容器,可以同步运行,也可以后台运行。
验证完成后,该镜像就可以发布,可以选择发布到某个镜像仓库,也可以直接打包发布,本文暂不涉及。
{完}