什么是我可以用来build立一个docker文件最轻的基础图像?

我通常使用ubuntu,arch linux镜像,但是最近我发现有一个叫做coreOS的操作系统专门用于docker容器。 由于我是docker工人,所以我不确定哪一个docker文件是build立docker文件的最佳基础。 这似乎是一个愚蠢的问题,但如果我在多个容器上运行大量的微服务,那么容器应尽可能轻。

这真的取决于你的要求:

  1. FROM scratch :如果您能够静态编译您的应用程序并且不需要任何其他二进制文件(库,shell或任何其他命令期限),那么您使用的是完全空的“scratch”。 你会看到这个作为其他基础图像的起点,在很多预编译的Go命令中也可以看到。

  2. Busybox:我认为这不是一个基本的图像,更多的是一个方便的实用程序容器。 你会得到很多很小的常见命令。 然而你没有得到的是一般的软件包pipe理器来轻松地安装其他组件。 目前这个大小在1M以下。

  3. 阿尔卑斯:这是docker员精简的形象,它做得很好,很小,但也给你一个包pipe理器。 但是,小尺寸是有代价的,像glibc这样的东西不包括在内。 你会发现许多官方的图片都是基于阿尔派的,所以在容器生态系统内部,这是一个非常受欢迎的select。 在开始添加软件包之前,当前的大小约为2M左右。

  4. Debian,Ubuntu和CentOS:这些都不是轻量级的基本映像,每个映像大概有五千万个左右。 但是,他们失去了大量的东西,可以从大量的软件包中获得,也可以从很多正在testing,修复错误,为上游做出贡献的人中获得。 他们还附带了一些应用程序可能预先安装的库。

尽pipe最后一个选项稍微大了一点,但请记住,基础映像只能通过networking传送并存储在磁盘上一次。 在那之后,除非你改变它们,否则任何build立在它们之上的图像只需要发送引用那个基础图像中的图层的清单,并且docker引擎将会看到它已经下载了这些图层。 而使用union fs,即使运行100个容器都指向该映像,这些层也不需要被复制,它们都在磁盘上对所有图像层使用相同的只读层,并将其更改写入其容器特定的RW层。

尝试alpine linux基本形象,这是真的很小(5米),并有权访问包存储库。 我们正在使用它在我们的生产环境中构build我们的JDK基础映像,并且运行良好。