Dockerfile中的命令数

我注意到Dockerfile中的每一行都创build一个单独的图像。 创build的图像数量是否有限制?

我们应该试着做一个RUN cmd1 && cmd2 && cmd3的oneliner吗?

如果我们使用像奎伊这样的服务,这会有什么不同呢?

谢谢!

正如Alister所说 ,如果使用AUFS文件系统,Docker映像中的层数有上限。 在Docker 0.7.2版本中,限制被提升到127层(更新日志 )。

由于这是底层联合文件系统(在AUFS的情况下)的限制,使用docker或其他私人registry不会改变结果。 但是你可以使用不同的文件系统。

目前的替代文件系统是使用devicemapper (请参阅CLI文档 )。 这些其他文件系统可能会有不同的层数限制 – 我不认为devicemapper有一个上限。

你是对的,通过在单个RUN语句中运行多个命令,可以减less层数。

或者,如果您确实需要大量图层来构build图像,则可以构build图像,直到达到最大值,然后使用docker export来创build图像文件系统的未分层副本。 然后docker import将其重新变成一个图像,这次只有一层,并继续build设。 你虽然失去了历史。

有一个限制,42 – 显然是AUFS强加的限制。

通过将单独的RUN命令完成的操作放到脚本中,然后运行该脚本,可以有所帮助。 然后,您将最终得到一个更大的图像层,而不是一些较小的文件进行合并。 较小的图像(具有多条RUN线)使初始testing更容易(因为RUNlist末尾的新添加可以重新使用之前的图像),所以通常在合并线之前等待Dockerfile已经稳定。

ADD多个文件时,您还可以通过添加一个目录完整而不是多个单独的文件来减less潜在的图像数量。