2014-11-06 53 views
1

我正在创建一些非常简单的Docker容器。我明白,每一步之后都会创建一个新的容器。但是,使用Hub中的其他Dockerfiles时,我不会收集未标记的图像。那么他们从哪里来?在网上浏览后,我发现如何删除它们,但我想更好地了解它们来自哪里。理想情况下,我想阻止他们被创造。未标记的Docker镜像来自哪里?

从他们的文档

这将显示未经标记的图像中,对图像 树(未中介层)的叶子上。这些图像出现在图像的新版本 图像将repo:标签从IMAGE ID上移开时,未标记为 。当目前正在使用容器时尝试删除图像时会发出警告。通过拥有这个标志,它可以批量清理 。

我不太明白这一点。为什么版本会将repo:tag远离IMAGE ID?

回答

3

Docker使用称为AUFS的文件系统,它代表扩展文件系统。几乎每一个Docker文件的每一行都会创建一个新的图像,当你将所有的图像叠加或叠加时,你会得到最终的泊坞窗图像。这本质上是一种缓存方式,所以如果只更改Docker文件的第9行,它将不会重新生成整个映像集。 (当然要看你有你的泊坞文件,如果你有一个COPYADD什么,点缓存除权后什么命令)

最终图像会得到标记它有什么标签,但所有这些中间图像对于创建最终图像是必要的,所以删除它们或防止它们被创建是没有意义的。希望这是有道理的。

+0

那么中间步骤是创建未标记图像的步骤?为什么我只能在我的自定义Docker文件中看到它们?当我从中心复制一个我似乎并没有得到它们。当我说复制我的意思是Dockerfile的内容;我没有下载图片。 – 2014-11-06 15:33:07

+0

您是否尝试过'泊坞窗图像-a'?这将显示所有内容 – 2014-11-06 17:54:39

+0

请注意,“码头图像-a”是您可以看到中间图像的唯一方式;如果OP没有使用该选项,那么我的答案适用。 – jwodder 2015-03-13 17:01:01

1

每当您为新映像分配已使用的标记(例如,通过构建图像foo,对其Dockerfile进行更改,然后再构建foo),旧图像将会丢失该标记,但仍然会留下来,即使它的所有标签都被删除了。这些旧版本的图像是docker images输出中的未加标签的条目,您可以用docker rmi <IMAGE HASH>安全地删除它们(尽管如果存在仍使用该图像的现存容器,删除将被拒绝)。

+0

@ adam-beck ......这是OP询问的未标记图像的根本原因 – 2016-04-05 15:01:03