适用于您的 Python 应用程序的最佳 Docker 基础镜像
当您为 Python 应用程序构建 Docker 镜像时,您是在现有镜像之上构建的——并且有许多可能的选择。有 Ubuntu 和 CentOS 之类的操作系统映像,并且有许多不同的 Python 基础映像变体。 你应该使用哪一个?哪一个更好?有很多选择,可能不清楚哪一个最适合您的情况。 因此,为了帮助您做出适合您需求的选择,在本文中,我将介绍一些相关标准,并建议一些适用于大多数人的合理默认设置。
当您为 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 年之前获得安全更新。
Ubuntu
20.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 的所有优点。
更多推荐
所有评论(0)