17

我通常使用 Ubuntu 或 Arch Linux 映像,但最近我发现有一个名为 CoreOS 的操作系统专门用于 docker 容器。

由于我是 docker 新手,我不确定哪一个是构建 Dockerfile 的最佳基础镜像。这似乎是一个愚蠢的问题,但如果我在多个容器上运行大量微服务,那么容器应该尽可能轻。

4

2 回答 2

33

这实际上取决于您的要求:

  1. FROM scratch:如果您能够静态编译您的应用程序并且不需要任何其他二进制文件(库、shell 或任何其他命令周期),那么您将使用完全空的“scratch”。你会看到它被用作其他基础镜像的起点,它也出现在许多预编译的 Go 命令中。

  2. Busybox:我认为这与其说是基础镜像,不如说是一个方便的实用程序容器。您可以在非常小的尺寸中获得许多常用命令。但是,您没有得到的是可以轻松安装其他组件的通用包管理器。当前大小低于 1M。

  3. Alpine:这是 docker 对流线型图像的看法,它做得很好,而且很小,但也给你一个包管理器。然而,小尺寸是有代价的,不包括 glibc 之类的东西。你会发现很多官方镜像都是基于 Alpine 的,所以在容器生态里面,这是一个非常流行的选择。在开始添加包之前,它的当前大小约为 2M。

  4. Debian、Ubuntu 和 CentOS:这些是较少的轻量级基础镜像,每个都有大约 5000 万个左右。但是他们随着规模的扩大而失去的东西,他们获得了大量的软件包,你可以从中提取,还有很多人正在测试、修复错误,并为上游的事情做出贡献。它们还附带一些库,某些应用程序可能会预装这些库。

虽然最后一个选项有点大,但请记住,基本图像只能通过网络推送并存储在磁盘上一次。之后,除非您更改它们,否则在它们之上构建的任何映像只需要发送引用该基础映像中的层的清单,并且 docker 引擎将看到它已经下载了这些层。并且使用 union fs,即使您运行 100 个容器都指向该映像,也永远不需要复制这些层,它们每个都在磁盘上为所有映像层使用相同的只读层,并将它们的更改写入它们的容器特定的 RW 层。

于 2017-03-23T00:28:12.490 回答
4

尝试alpine linux基础镜像,它真的很小(5M)并且可以访问包存储库。我们正在使用它在我们的生产环境中构建我们的 JDK 基础映像,并且到目前为止它运行良好。

于 2017-03-23T00:05:07.743 回答