Choose Base Container Image For Python App¶
Full vs Slim vs Alpine vs Stretch, Buster, Jessie, Bullseye¶
当你在 Docker Hub 上搜索基础镜像的时候, 你会在 Tag 中看到很多 Slim, Alpine, Stretch 等词汇. 我们来理解一下这些词汇代表的含义.
Full official image¶
没有任何词汇, 只有版本号, 例如 X.Y.Z
.
这些镜像基于最新的稳定 Debian 操作系统, 包含了 Linux 环境中的所有工具, 例如 wget, curl, git 等等. 相当于一个完整的 Linux 虚拟机. 自然体积也是最大的. 例如 3.8.11
有 350MB.
如果你不关心最终镜像的大小, 完整镜像是最安全的选择, 也是一个保底选项.
Slim¶
包含词汇 slim, 例如 X.Y.Z-slim
.
这些镜像是 Full official image 的精简版, 通常只安装运行特定工具的最小包. 例如 Python 3.8.11-slim
只有 35MB.
注意, 在使用这个镜像时, 一定要进行彻底的测试!
Alpine¶
包含词汇 alpine, 例如 X.Y.Z-alpine
.
alpine 镜像基于 alpine Linux 项目, 这是一个专门为容器内部使用而构建的操作系统. 体积非常小. Alpine 基础镜像 (不包含任何编程语言的运行时, 只有 Linux 内核) 只有 5MB, 不包含任何编译所需的依赖. 如果你需要某个语言的 Alpine 镜像, 请不要用那个 5MB 的基础镜像来安装语言运行时, 而使用预装了该语言的镜像, 例如 Python 3.8.11-alpine
只有 15MB.
由于它不包含编译所需的依赖, 所以一些需要编译的包, 例如比较旧的 numpy 和 pandas (旧的包不包含预先编译好的 wheel 安装文件) 是无法在 alpine 上安装的, 因为需要很多 C 依赖来编译.
bullseye / buster / stretch / jessie¶
bullseye / buster / stretch / jessie
是针对不同的 Debian 代号. 其中:
bullseye: Debian 11
buster: Debian 10
stretch: Debian 9
jessie: Debian 8
建议到 Debian Release 查看它们的支持计划, 尽量选择 Stable + LTS (Long term support) 的版本. 例如现在时 2023-06-01, 官网的状态如下. 我会选择 buster 版本, 因为他是 stable 版本, 并且处于 LTS support 中.
The next release of Debian is codenamed bookworm — testing — release planned for 2023-06-10
Debian 11 (bullseye) — current stable release
Debian 10 (buster) — current oldstable release, under LTS support
Debian 9 (stretch) — archived release, under extended LTS support
Debian 8 (jessie) — archived release, under extended LTS support
Debian 7 (wheezy) — obsolete stable release
Debian 6.0 (squeeze) — obsolete stable release
Final Choice for Python App¶
如果你懒, 也不在乎镜像大小, 那么用 Full official image 是最安全的选择.
如果你在乎镜像大小, 又希望镜像稳定, 就用 slim.
如果你极度在乎镜像大小, 又愿意自己折腾, 就用 alpine.
Reference: