如果docker文件中有RUN命令,则它会创建一些中间映像。我的问题是这样的中间映像是否会占用硬盘驱动器的任何内存?如果是,docker build --rm
应该足够了吗?
答案 0 :(得分:2)
RUN
不会创建中间的图像,但会创建中间的 layers / 容器。
如果运行docker build --rm
,这些容器将在生成后被删除,是的,它可以节省磁盘空间,但是每次重建相同的映像时都需要更多时间,因为它将创建这些层每次,因为它们没有被缓存。
编辑(感谢@Shashank V):默认情况下设置了--rm
选项,因此不管是否设置都没有区别。
答案 1 :(得分:2)
是的,中间层占用磁盘空间,通常这是一件好事。这有利于图层的重用和快速构建。相反,您应该集中精力通过优化dockerfile来减少层数。您最终的Docker映像实际上是所有图层的组合。因此,除非您删除最终图像并且没有其他图像在使用这些图层,否则您将无法删除这些图层。
docker build --rm
不会节省任何额外的磁盘空间。要了解原因,您应该知道docker build
的工作原理-dockerfile中的每条指令(例如RUN)都会启动一个新容器,该指令完成后,该容器将退出并提交给映像。
docker build --rm
删除了这些中间的容器。 --rm
选项默认情况下为true,因此与docker build --rm
相比,docker build
的影响不大。由于某种原因,如果您想保留中间容器,则可以使用--rm=False
将其关闭。
如果有任何其他图像未使用的图层,则可以将其删除。这些称为dangling
层。您可以使用以下命令将其删除-
docker rmi $(docker images -f "dangling=true" -q)