什么是悬空图像,什么是未使用图像?

新手上路,请多包涵

docker image prune 的 docker 文档中, 可以使用 -a 标志来

删除所有未使用的图像,而不仅仅是悬空的图像

然后

删除所有悬空图像。如果指定了 -a,还将删除任何容器未引用的所有图像。

有人可以向我解释什么是悬空图像,悬空图像和未使用图像有什么区别?

原文由 herm 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 521
2 个回答

未使用 的图像意味着它尚未在容器中分配或使用。例如,当运行 docker ps -a 时,它将列出所有已退出和当前正在运行的容器。显示在任何容器内使用的任何图像都是“使用图像”。

另一方面, 悬空 图像仅意味着您已经创建了图像的新版本,但没有给它一个新名称。因此,您拥有的旧图像成为“悬空图像”。那些旧图像是未标记的图像,当您运行 docker images 时,会在其名称上显示“ <none> ”。

运行 docker system prune -a 时,它将删除未使用的和悬空的图像。因此,容器中使用的任何图像,无论它们已退出还是当前正在运行,都不会受到影响。

原文由 Serey 发布,翻译遵循 CC BY-SA 4.0 许可协议

清理悬空图像的最安全和最简单的方法

docker images --quiet --filter=dangling=true | xargs --no-run-if-empty docker rmi

Docker 镜像由多个层组成。悬空图像是与任何标记图像无关的层。它们不再有任何用途并消耗磁盘空间。

注意:我建议不要在生产中使用 prune ,因为 docker system prune -a 会删除所有没有被容器引用的镜像,我们无法回滚到之前的版本.

通过将过滤器标志 -fdangling=true 添加到 docker images 来列出悬空图像。

列出悬空图像

docker images -f dangling=true

删除悬空图像

docker rmi $(docker images -f dangling=true -q)

或者

docker images --quiet --filter=dangling=true | xargs --no-run-if-empty docker rmi

当我们运行任何 cron 作业来删除悬空的东西时,使用上面的方法来确保作业成功运行。就像在 Jenkins 中一样,如果我们使用低于 commad 的作业运行自由风格的作业,即使机器中不存在任何悬空的东西,也永远不会失败。

这是清理悬空图像并取回磁盘空间以供使用的最安全和最简单的方法。

原文由 Jinna Balu 发布,翻译遵循 CC BY-SA 4.0 许可协议