如何为 Python 应用选择最好的 Docker 镜像?

前言

在使用 Python 的早些年,为了解决 Python 包的隔离与管理 virtualenvwrapper 就成为我的工具箱中重要的一员。后来,随着 Python 3 的普及,virtualenvwrapper 逐渐被 venv 所替换。毕竟 venv 是 Python 3 的标配,优点是显而易见的。而这几年,应用场景的的复杂性越来与高,无论是开发还是部署都需要设置复杂的环境。例如使用 redis 实现消息队列,用 Psycopg 完成对于 PostgreSQL 数据库的存取等等。随之而来 Docker 就变成了程序员必不可少的常备工具。为了掌握如何将我的 Python 应用与 Docker 结合起来,就要学习他人的经验分享。于是一次又一次地看到了下面这样的 Dockerfile 例子:

相比起来,我不熟悉 Alpine 这个 Linux 发行版本。我很困惑这个版本难道比其它哪些老字号的 Linux 发行版更适合 Docker 的环境吗?至于我的 Python 应用,究竟选择哪一个 Docker 基础镜像更好呢?

对于 Docker 基础镜像的要求

为我的 Python 应用构建一个 Docker 镜像并不是要从零开始,而是从现有的 Linux 基础镜像开始构建。这些基础镜像除了提到过的 Alpine 以外 还有我更熟悉的 Ubuntu、Centos 、Debian 等等。在决定选择哪一个之前,我们需要回答的一个问题就是:

  • 我们究竟对于这个 Docker 基础镜像有哪些要求?

  • 这些要求既要满足通常意义上我们对操作系统的要求,也要满足对于 Python 应用的特殊的需求。

归纳起来,我们的需求应当包括这几点:

  • 稳定性:要求今天的构建与以后的构建有相同的基本库、目录结构和基础结构。否则我们的 Python 应用程序将将有可能存在不确定的隐患。

  • 安全更新:需要基础镜像得到良好维护,以便及时获取基本操作系统的安全更新

  • 最新的依赖关系:除非我们的应用仅仅是一个简单的 Python 程序,否则就不得不依赖操作系统所提供 的库和应用程序(例如:GCC 编译器、OpenSSL 库等)。我们需要这些应用和库要足够新,否则就会有各种安全性的问题或者功能性的不足。

  • 丰富的库资源:对于某些应用,可能需要安装一些不太流行的库(例如 lxml 等)。这就需要我们选择的基本镜像提供丰富的库资源。

  • 最新的 Python 版本:虽然可以通过自行安装 Python 来解决,但是拥有最新的 Python 的版本无疑可以节省我们的时间、精力。

  • 小型的 Docker 镜像:在所有条件都相同的情况下,拥有尺寸较小的 Docker 镜像无疑更胜一筹。无论是镜像的构建还是占用存储空间的开销,更小的尺寸一定更有优势。

考虑到应用部署在产环境的需要,我们所选择的 Docker 镜像还应当具备长期支持(Long-term support, LTS) 的承诺。

Linux 镜像版本的选择

围绕着上述的需求,我们很容易就会找到一批候选的版本。乍看起来,这些基础镜像应该能够满足我们的需要。接下来我们需要仔细甄别其具体的差异,以找出最适合我们的版本,尤其是适合我们的 Python 应用。

选项一:传统的 Linux 分发版本 – Ubuntu TLS、CentOS 以及 Debian

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值