Dockerfile中的命令数

Dockerfile中的命令数,docker,Docker,我注意到Dockerfile中的每一行都创建了一个单独的图像。创建的图像数量有限制吗 我们是否应该尝试执行一系列的运行cmd1&&cmd2&&cmd3 如果我们使用像Quay这样的服务,这会有什么不同 谢谢 有一个限制,42个-显然是AUF强加的硬限制 通过将单个RUN命令中的操作放入脚本中,然后运行该脚本,可以在某种程度上避免这种情况。然后,您将得到一个更大的图像层,而不是许多要合并的较小文件。较小的映像(具有多个运行行)使初始测试更容易(因为在运行列表末尾添加的新映像可以重复使用以前的映像)

我注意到Dockerfile中的每一行都创建了一个单独的图像。创建的图像数量有限制吗

我们是否应该尝试执行一系列的
运行cmd1&&cmd2&&cmd3

如果我们使用像Quay这样的服务,这会有什么不同


谢谢

有一个限制,42个-显然是AUF强加的硬限制

通过将单个
RUN
命令中的操作放入脚本中,然后运行该脚本,可以在某种程度上避免这种情况。然后,您将得到一个更大的图像层,而不是许多要合并的较小文件。较小的映像(具有多个运行行)使初始测试更容易(因为在运行列表末尾添加的新映像可以重复使用以前的映像),因此通常需要等到Dockerfile稳定后再合并这些行

您还可以通过添加目录已满而不是单个文件来减少添加大量文件时可能出现的图像数量。

因为,如果您使用的是AUFS文件系统,Docker图像中的层数有一个上限在Docker版本0.7.2中,限制被提高到127层()。

由于这是对底层union文件系统的限制(在AUFS的情况下),因此使用Quay或其他私有注册中心不会改变结果。但是您可以使用不同的文件系统

当前的替代文件系统是使用
deviceapper
(请参阅)。这些其他文件系统在层数上可能有不同的限制——我认为devicemapper没有上限

没错,通过在一个RUN语句中运行多个命令,可以减少层的数量


或者,如果确实需要很多层来构建图像,则可以构建图像,直到达到最大值,然后使用
docker export
创建图像文件系统的非分层副本。然后,
docker import
再次将其转换为图像,这次仅使用一层,然后继续构建。尽管如此,您还是失去了历史记录。

谢谢您的回复。因此,如果我创建一个带有41行Dockerfile的图像,并将其推到Quay,然后创建另一个图像,使用我在Quay的初始图像作为基础,我可以在Dockerfile中再添加41行?@RezaSanaie我的理解是,这是不正确的。推送的第一个图像包含41层。如果你依赖于这一点,那么你将拥有这41层,然后再添加任何额外的内容。AUFS用于保持文件系统的分层。我认为这在Docker中是一个巨大的限制,但也许他们正在等待AUF处理更多的上游层。所以最好的方法是添加一个安装脚本并运行它。对吗?在我看来,0.9版本中仍然有42个限制。