当您为 Python 应用程序构建 Docker 镜像时,您是在现有镜像之上构建的——并且有许多可能的选择。有 Ubuntu 和 CentOS 之类的操作系统映像,并且有许多不同的 Python 基础映像变体。

你应该使用哪一个?哪一个更好?有很多选择,可能不清楚哪一个最适合您的情况。

因此,为了帮助您做出适合您需求的选择,在本文中,我将介绍一些相关标准,并建议一些适用于大多数人的合理默认设置。

你想从基础镜像中得到什么?

选择基本映像有许多通用标准,尽管您的特定情况可能会强调、添加或删除其中一些:

稳定性:您希望今天的构建能够为您提供与明天构建相同的基本库、目录结构和基础架构,否则您的应用程序将随机中断。

安全更新:您希望基础镜像得到良好维护,以便及时获得基础操作系统的安全更新。

最新的依赖关系:除非您正在构建一个非常简单的应用程序,否则您可能会依赖操作系统安装的库和应用程序(例如编译器)。你希望他们不要太老。

广泛的依赖关系:对于某些应用程序,可能需要不那么流行的依赖关系——一个可以访问大量库的基础映像使这更容易。

最新的 Python:虽然这可以通过自己安装 Python 来解决,但拥有最新的 Python 可以为您节省一些精力。

小镜像:在所有条件相同的情况下,使用更小的 Docker 镜像比使用更大的 Docker 镜像更好。

对稳定性的需求建议不要使用支持生命周期有限的操作系统,如 Fedora 或非 LTS Ubuntu 版本。

为什么你不应该使用 Alpine Linux

对于想要小图像的人来说,一个常见的建议是使用 Alpine Linux,但这会导致更长的构建时间、更小的图像和模糊的错误。

您可以查看链接的文章了解详细信息,但我建议不要使用 Alpine。

选项 #1:Ubuntu LTS, CentOS, Debian

三个主要的操作系统大致符合上述标准(日期和发布版本在撰写本文时是准确的;随着时间的推移,可能需要稍有不同的选择)。

Ubuntu 18.04(ubuntu:18.04映像)于 2018 年 4 月发布,由于它是一个长期支持版本,它将在 2023 年之前获得安全更新。

Ubuntu20.04(ubuntu:20.04映像)将于 2020 年 4 月下旬发布,由于它是一个长期支持版本,它将在 2025 年之前获得安全更新。

CentOS 8 (centos:8) 于 2019 年发布,完整更新至 2024 年,维护更新至 2029 年。

Debian 10(“Buster”)于 2019 年 7 月 6 日发布,支持到 2024 年。

只有 Ubuntu 20.04 包含最新版本的 Python(无论如何,直到 3.9 发布),所以你必须自己安装 Python。

选项 #2:Python Docker 映像

另一种选择是Docker 自己的“官方”python 镜像,它预装了多个 Python 版本(3.5、3.6、3.7、3.8 beta 等),并且有多个变体:

Alpine Linux,正如我上面解释的,我不推荐使用它。

Debian Buster,安装了许多常用软件包。镜像本身很大,但理论上这些包是通过其他官方 Docker 镜像会使用的通用镜像层安装的,因此整体磁盘使用率会很低。

Debian Buster 超薄变体。这缺少通用包的层,因此映像本身要小得多,但是如果您使用许多其他基于 Buster 的 Docker 映像,则整体磁盘使用率会更高一些。

Alpine 的大小优势甚至不是特别引人注目:python:3.8-slim-buster 的下载大小为 60MB,python:3.8-alpine 为 35MB,它们未压缩的磁盘大小为 193MB 和 109MB分别。

那么你应该使用什么?

所以截至 2020 年 4 月,Debian Buster 是一个很好的操作系统基础:

它比ubuntu:18.04更新。

ubuntu:20.04将在软件包更新方面处于领先地位,并且它是一个长期支持版本,因此它在 2020 年 4 月发布后也是一个不错的选择。它只会限制您使用 Python 3.8,而无需执行多一点工作。此外,与任何新的主要软件版本一样,可能值得在初始版本后等待一到三个月才能修复所有错误。

它很稳定,不会有重大的库更改。

出现奇怪的生产错误的机会比 Alpine 少。

基于 Debian Buster 的官方 Python Docker 镜像也为您提供了所有 Python 版本。

官方 Docker Python 镜像的苗条变体——例如python:3.8-slim-buster——对于大多数用例来说是一个很好的基础镜像。下载时为60MB,未压缩到磁盘时为180MB,它为您提供最新的 Python 版本,并且拥有 Debian Buster 的所有优点。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐