本文只讨论 Linux x86平台的 python docker 镜像,不讨论 windows、 arm等其他平台。目前 Python 官方 docker 镜像有两个,分别是基于 debian 和 alpine,先说结论,能用 debian,就不要用 Alpine Linux。
Alpine Linux
Alpine Linux 是一个基于 busybox 的轻量级 Linux 发行版,他的口号是 Small、Simple、Secure。也就是小,简单和安全。我在刚开始接触 docker 的时候,Python 镜像用的就是 Alpine ,被他只有 40M 大小的镜像所吸引,时隔两年,现在看来,他仍然有很多的优点。
优点:
-
镜像小,节省空间
-
镜像自带常用命令行工具,比如 vim,file,ps 等命令;
-
文件高亮,目录,可执行文件一目了然
-
tab 补齐
-
安全?简单?其他家好像也不差吧。
但是在面怼的工作越来越复杂之后,就发现 Alpine Linux 不够用了,最重要一点,他是基于 busybox ,而不是常规的 Linux 发行版,导致一些 python 的库安装起来很麻烦。
缺点:
-
对 python 第三方库支持不好,常常需要自己动手打 whl 包;
-
对 C 语言的 Python 库支持不好,需要自己手动编译,比如 gevent, 加密库 Crypto 等;
-
如果工作中需要调用动态库(.so)文件,那么可能需要准备两个版本,一个版本专门编译给 alpine 用;
-
在工作对接中,如果对方只提供了普通 x86 的SDK,那么会增加沟通成本;
对我而言,Alpine 的优点只是锦上添花,而缺点确是让我头大,所以我现在对 Python Alpine 镜像已经渐行渐远。
Debian
大名鼎鼎的 debian 就不用多做介绍了吧,Ubuntu的爸爸。目前提供的镜像有两种,分别基于 buster (debian 10)和bullseye(debian 11)。
优点:
-
Python 第三方库支持广泛,大部分库提供的 python whl 包,直接安装无压力;
-
对 C 语言库支持优秀,在 centos 能运行的代码,在 python debian 容器中基本都能完美运行;
-
以上两点还不够吗?
缺点:
-
镜像偏大,python-3.9.6-slim-buster 有 115MB,而 python-3.9.6-alpine 只有 45MB;
-
缺少常用工具,比如想去容器里面查看一下运行情况,连 ps,vim 常用命令都没有。
在我使用 Python 容器化的这几年中,我从刚开始的钟情于 Alpine Linux,到对 Alpine Linux 越来越不顺眼,到最后加入 debian 阵营,也是工作内容变化牵引着取舍和变化,省心的,就是最好的。
再说一句,虽然 python 镜像我已经很少使用 Alpine Linux了,但是 mariadb,mongodb我还在使用 Alpine Linux 镜像。

本文探讨了在Linux x86平台上,Python Docker镜像选择 Debian 和 Alpine 的优缺点。尽管Alpine Linux以其小巧和自带常用工具为亮点,但其对Python第三方库和C库的支持不足,增加了工作复杂度。相比之下,Debian镜像虽然体积较大,但提供广泛库支持和良好C库兼容性,成为更优选择。作者根据实际工作经验,建议在面对复杂工作场景时,优先考虑使用Debian镜像。
964

被折叠的 条评论
为什么被折叠?



