2017-07-17 67 views

回答

23

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

另一方面,一张悬挂的图像意味着你已经创建了图像的新版本,但没有给它一个新的名字。所以你的旧图像变成了“摇摆的图像”。那些旧图像是未标记的,当您运行docker images时,它的名称上会显示“<none>”。

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

+0

根据运行docker修剪时的文档没有 - 只有悬挂的图像被删除。 -a将确保未使用的图像也被正确删除? https://docs.docker.com/engine/reference/commandline/system_prune/ – herm

+0

这是正确的,-a将[删除所有未使用的图像不只是悬挂的](https://docs.docker.com/engine/reference/commandline/system_prune /) – Serey

+0

非常有趣。所以一个容器可以使用一个摇晃的图像。 [注意:如果存在任何使用这些未标记图像的容器,Docker会警告您。](https://docs.docker.com/engine/reference/commandline/images/#filtering) – herm

7

泊坞窗中的图像被sha256摘要引用,通常被称为图像ID。该摘要就是您需要的图像存在于码头主机上。通常,您将拥有指向这些摘要的标签,例如标签busybox:最新的当前指向图像ID c30178c523 ...在我的系统上。多个标签可以指向相同的图像,并且可以改变任何标签以指向不同的标识,例如,当你拉一个busybox的新副本:最新或建立一个新版本的应用程序图像。

悬挂图像是没有标签且没有子图像的图像(例如,使用不同版本的FROM busybox:latest的旧图像)指向它们的图像。他们可能在之前有一个标签指向他们,并且标签后来改变了。或者他们可能从未有过标签(例如,不包含标签选项的docker build的输出)。只要没有容器仍在运行,这些参考旧图像ID,这些通常是安全的。保持它们的主要原因是构建缓存目的。

此外,您可能已经下载了当前未被容器(包括已停止的容器)使用的图像。这些与悬挂图像完全不同,只要您不打算将来使用它们,或者在您确实需要时再下载另一个副本,则可能会安全删除。