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潜在的图像数量。
- 用一个命令复制多个目录
- 为什么当我向mysql dockerfile中添加`RUN ln -sf / dev / stderr / var / log / mysql / error.log`会中止?
- 使用Docker为开发环境设置MySQL
- Spring Actuator – 来自docker集装箱的度量聚合
- docker守护进程exec:“dockerd”:在%PATH%中找不到可执行文件
- 在构build时将$ HOSTNAME传递给Docker容器
- docker-entrypoint-initdb.d中的文件在使用docker撰写时永远不会被执行
- Ubuntu docker镜像不包含任何/ dev / sdX块设备?
- 如何用VS代码远程debuggingDocker容器中的Python代码