我应该如何选择合适的Docker镜像?

5

Docker镜像通常可以使用不同的基础操作系统映像。我不会在该容器中安装其他应用程序。我将为每个所需的应用程序创建单独的容器。

选择哪个基础镜像是否重要?如果不重要,为什么会选择一个较大的镜像而不是一个较小的镜像?我需要放弃什么?

例如,Kong镜像有两种变体,大小差别很大:

基于CentOS - 143.23 MB

基于Alpine - 42.71 MB

https://hub.docker.com/_/kong?tab=tags

顺便说一句,我将在Ubuntu上运行docker。


这完全取决于您的需求和用途。此外,应选择尺寸较小的图像,以便减小大小和其他开销。 - Saad
我的要求只是容器能够运行所包含的应用程序。我不会在该容器中安装其他应用程序。我将为每个需要的应用程序使用单独的容器。 - Dojo
根据我们的最终目标,如果基于 Alpine 的镜像能够成功地包含您的应用程序,则它必定是一个不错的选择。因为它是轻量级的,只有最少数量的软件包和其他依赖项。 - Saad
我对Docker还很陌生,但据我所知,最佳实践是为每个应用程序分别使用容器,并且不修改从Docker Hub下载的标准镜像。因此,在这些容器中,我不会安装任何自己的内容。所以我猜一切都应该在基于alpine的镜像上正常运行。这是正确的吗? - Dojo
您的应用程序可以在任何基础镜像上运行,问题是哪个更适合,alpine基础镜像只有5MB的大小,您可以使用10MB RAM的alpine,但无法运行centos。 - Adiii
显示剩余2条评论
2个回答

4

如评论中所述,这完全取决于您的需求,但在提到的两个映像中,我会选择alpine。

选择哪个基础映像是否重要?

是的,很重要,选择较小的一个有不同的原因,一些优点可能是:

  • 尺寸更小(构建、拉取、推送速度快)
  • 与大型映像相比占用空间少
  • 操作系统本身消耗的内存较少,与CentOS相比
  • Alpine被认为是安全且快速的
  • Alpine是docker registry的官方映像

您可以阅读实验性基础文章here

SMALL

Alpine Linux 建立在 musl libc 和 busybox 的基础之上。这使得它比传统的 GNU/Linux 发行版更加轻巧和高效。一个容器只需要不到8 MB,最小的磁盘安装大约需要130 MB 存储空间。你不仅可以获得完整的Linux 环境,还可以从存储库中选择大量的软件包。二进制软件包经过精简和拆分,让你更加掌控自己安装的内容,从而使你的环境尽可能地轻巧和高效。

alpinelinux


我完全理解使用较小图像的优点,但我想了解不选择较大图像会失去什么。 - Dojo
你没有失去任何东西,其他操作系统是为虚拟机、容器、机器或任何平台设计的,但alpine是专门为容器化而设计的,不是其他什么。 - Adiii
@Dojo的缺点可能是在使用Alpine镜像时需要手动安装更多的软件包。但这意味着您的Docker容器内不会有不必要的应用程序,因为预安装数量是有限制的。 - R A
另外,并非所有软件都与Alpine的musl libc兼容。 - AKX
@AKX 是的,但在上面的情况下,Alpine套件和官方镜像都存在,所以我认为最好选择alpine? - Adiii
1
只是一个快速的提醒。如果你将要在 Kubernetes 中部署你的容器,你需要意识到 Alpine ndots DNS 问题。 - SiHa

3
如果您只打算直接运行该镜像,就像我所假设的那样:

我不会在容器中安装其他应用程序。我将为每个所需应用程序创建单独的容器。

那么这并不重要(当然,除非镜像的开发者注明需要!)。
如果您想使用其中一个镜像作为基础镜像,那么情况就有些不同了 - 正如评论和答案中所指出的,这些镜像所基于的不同发行版具有不同的工具和功能(Ubuntu/Debian有一个包管理器 apt,Alpine使用 musl libc 并且有apk)。
此时,您需要选择一个具有您熟悉的工具且支持在基础镜像上进行更改的基础镜像。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接