Python docker 容器,选哪个镜像好

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

本文只讨论 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 大小的镜像所吸引,时隔两年,现在看来,他仍然有很多的优点。

优点:

  1. 镜像小,节省空间

  2. 镜像自带常用命令行工具,比如 vim,file,ps 等命令;

  3. 文件高亮,目录,可执行文件一目了然

  4. tab 补齐

  5. 安全?简单?其他家好像也不差吧。

但是在面怼的工作越来越复杂之后,就发现 Alpine Linux 不够用了,最重要一点,他是基于 busybox ,而不是常规的 Linux 发行版,导致一些 python 的库安装起来很麻烦。

缺点:

  1. 对 python 第三方库支持不好,常常需要自己动手打 whl 包;

  2. 对 C 语言的 Python 库支持不好,需要自己手动编译,比如 gevent, 加密库 Crypto 等;

  3. 如果工作中需要调用动态库(.so)文件,那么可能需要准备两个版本,一个版本专门编译给 alpine 用;

  4. 在工作对接中,如果对方只提供了普通 x86 的SDK,那么会增加沟通成本;

对我而言,Alpine 的优点只是锦上添花,而缺点确是让我头大,所以我现在对 Python Alpine 镜像已经渐行渐远。

Debian

大名鼎鼎的 debian 就不用多做介绍了吧,Ubuntu的爸爸。目前提供的镜像有两种,分别基于 buster (debian 10)和bullseye(debian 11)。

优点:

  1. Python 第三方库支持广泛,大部分库提供的 python whl 包,直接安装无压力;

  2. 对 C 语言库支持优秀,在 centos 能运行的代码,在 python debian 容器中基本都能完美运行;

  3. 以上两点还不够吗?

缺点:

  1. 镜像偏大,python-3.9.6-slim-buster 有 115MB,而 python-3.9.6-alpine 只有 45MB;

  2. 缺少常用工具,比如想去容器里面查看一下运行情况,连 ps,vim 常用命令都没有。

在我使用 Python 容器化的这几年中,我从刚开始的钟情于 Alpine Linux,到对 Alpine Linux 越来越不顺眼,到最后加入 debian 阵营,也是工作内容变化牵引着取舍和变化,省心的,就是最好的。

再说一句,虽然 python 镜像我已经很少使用 Alpine Linux了,但是 mariadb,mongodb我还在使用 Alpine Linux 镜像。


参考:https://hub.docker.com/_/python

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值