Python Docker 镜像,可以分为四种类型(以 3.7 版本镜像为例)——python:3.7-alpine
、python:3.7-slim
、python:3.7-buster
与python:3.7
。目前,Debian latest stable 版本就是 buster,故而在我写下这篇文章时 python:3.7-buster
与 python:3.7
等价。
类型 | 系统 | 系统包管理工具 |
---|---|---|
alpine | Alpine | apk |
slim | Debian buster-slim | apt/apt-get |
buster | Debian buster | apt/apt-get |
default | Debian latest stable | apt/apt-get |
default
此类镜像使用最新的 Debian 稳定版作为系统,包含了所有 CPython 所需要的依赖。当你是一个新手或者不想浪费时间时,使用此镜像最佳。
-buster
此类镜像使用 Debian buster 作为系统,包含了所有 CPython 所需要的依赖。当你需要指定使用 Debian buster 而不是未来可能会变化的 Debian letest stable 时,可以使用它。
-slim
此镜像是默认镜像的瘦身版,它与默认镜像拥有一样的系统和包管理工具,但省略许多不常用的依赖,故而它变得很小。但这意味着当你需要一些不常用的依赖时,需要自己安装。
-alpine
alpine
包含了在 Linux 上运行 Python 所需要的最小环境,它使用 Alpine
作为系统。因为它最小,所以只能直接运行纯 Python 代码。任何需要编译 C 代码或动态链接库的 Python 仓库都不能直接使用,需要你自己安装依赖。故而此镜像需要更多的时间去调配系统依赖,并且如果你不懂如何在使用后删除那些可删除的系统依赖,使用它构建的最终镜像依旧不会很小。
如何挑选
由于同一台机器上的 Docker Image 是可以共享的。所以当你有许多 Python 项目需要跑在同一台机器上时,不要犹豫,default
或 buster
是你最佳的选择。使用它们,你不需要为每个项目安装大量各自专属的依赖,这能减少大量的磁盘空间。
当你愿意花时间去调试依赖并且对镜像大小有追求时,slim
和 alpine
都是好的选择。但如果不是追求极致的小——大量使用 C 扩展的项目也无法追求极致的小,那么 slim
会比 alpine
让你更快的完成工作。
推荐使用 alpine
在仅使用了纯 Python 代码或少量的使用了 C 扩展的项目,它能让你构建的镜像保持最小的状态。