我注意到Dockerfile中的每一行都会创建一个单独的映像。创建的图像数量是否有限制?
我们是否应该尝试做一个单一的RUN cmd1 && cmd2 && cmd3替代方案?
RUN cmd1 && cmd2 && cmd3
如果我们使用Quay这样的服务,这会有什么不同?
谢谢!
正如Alister所说,如果您使用AUFS文件系统,则Docker映像中的层数是有上限的。 在Docker 0.7.2版本中,限制增加到了127层( changelog)。
由于这是对底层联合文件系统的限制(对于AUFS),因此使用Quay或其他私有注册表不会改变结果。但是您可以使用其他文件系统。
当前将使用替代文件系统devicemapper(请参阅CLIdocs)。这些其他文件系统在层数上可能有不同的限制-我认为devicemapper没有上限。
devicemapper
没错,通过在单个RUN语句中运行多个命令,可以减少层数。
或者,如果您确实需要很多层来构建映像,则可以构建映像,直到达到最大值为止,然后使用它docker export来创建映像文件系统的未分层副本。然后dockerimport再次将其重新转换为图像,这次只有一层,然后继续构建。您会以这种方式失去历史。
docker export
dockerimport