我通常使用Ubuntu或Arch Linux映像,但我最近发现有一个名为CoreOS的操作系统专门用于docker容器.
由于我是docker的新手,我不确定哪一个是构建我的Dockerfile的最佳基本映像.这似乎是一个愚蠢的问题,但如果我在几个容器上运行大量的微服务,那么容器应该尽可能轻.
这实际上取决于您的要求:
FROM scratch
:如果您能够静态编译应用程序并且不需要任何其他二进制文件(库,shell或任何其他命令周期),那么您将使用完全空的"scratch".您将看到这被用作其他基本图像的起点,并且它也可以在许多预编译的Go命令中找到.
Busybox:我认为这不是一个基本图像,而是一个方便的实用容器.你可以获得很多非常小的常用命令.但是,您没有得到的是通用软件包管理器,可以轻松安装其他组件.目前的规模小于1M.
阿尔卑斯山:这是码头工作者对流线型图像的看法,它做得很好而且体积小但也给你一个包管理器.然而,小尺寸是有代价的,不包括glibc之类的东西.您会发现许多官方图像都是基于Alpine的,所以在容器生态系统中,这是一个非常受欢迎的选择.在开始添加包之前,当前大小约为2M.
Debian,Ubuntu和CentOS:这些是较少的轻量级基本图像,每个图像大约有50M左右.但是,他们通过大量的软件包获得了大小的损失,这些软件包可以从中获取,而且许多人正在测试,修复错误并为上游做出贡献.它们还附带了一些库,一些应用程序可能会预先安装这些库.
虽然最后一个选项有点大,但请记住,只能将基本图像推到线上并存储在磁盘上一次.之后,除非您更改它们,否则构建在它们之上的任何图像只需要发送引用该基本图像中的图层的清单,并且docker引擎将看到它已经下载了这些图层.使用union fs,即使你运行100个容器都指向该图像,也不需要复制这些层,它们每个都在磁盘上为所有图像层使用相同的只读层,并将其更改写入其容器特定的RW层.