【问题标题】:Docker: Dangling ImagesDocker:悬空图像
【发布时间】:2020-05-22 23:24:00
【问题描述】:

我正在尝试理解以下命令

docker image prune
docker image prune -a

根据文档

docker image prune:删除悬空图像

docker image prune -a:删除悬空和未使用的图像`

我试图了解悬空图像和未使用图像之间的区别。

根据this stackoverflow 的帖子,未使用的图像是未在容器中分配或使用的图像。

所以基本上,如果我运行

docker pull hello-world

(从未执行过命令docker run hello-world

那么 hello-world 的图像会是未使用的图像吗??

那么悬空图像是如何创建的?

根据上面引用的堆栈溢出帖子,“悬空图像只是意味着您已经创建了图像的新构建,但它没有被赋予新名称。所以你拥有的旧图像成为'悬空图像图像'。”

这到底是什么意思?即,创建图像的新版本是什么意思?您如何创建图像的新版本?什么是未标记图像?

谁能给我一个如何创建悬空图像的示例?

【问题讨论】:

  • 创建悬空图像的快速方法是运行命令“docker build”。 , 没有名称(其中 . 是 docker 文件的相对路径)。

标签: docker docker-image docker-command


【解决方案1】:

悬空图像仅仅意味着你有一个图像,但它没有附加任何标签。 (Prune unused Docker objects)

你是怎么做到的? 通过构建具有相同名称和相同标签的图像。这是通常的情况,不是唯一的情况。

  1. 您构建一个图像my.image.example.com 并用latest 标记它。
  2. 您可以通过将其引用为my.image.example.com:lastest 来推/拉您的图像
  3. 您进行了一些更改,并重建了您的映像。与您在第 1 步中所做的相同。
  4. 您有一个新的图像 ID,具有相同的名称和相同的标签。
  5. 第一张图片现在悬空,您只能使用它的完整 SHA 来解决它。

这是对图像标签的高度抽象的描述;

大多数(如果不是全部)计算机软件都是由名称和版本组成的。例如,您的操作系统可能是 Windows 10、OSX Catalina (14 Mojave) 等。

在容器世界中,图像标签用于说明软件的版本。图像名称 - 是软件本身。

当您下载图像时,您需要指定图像名称及其“版本”(即标签)。这是常见的用例。 标签可用于多种用途;一张图片可以有很多标签,但不能有一个标签引用多张图片。

我认为Docker overview 是了解平台基本背景的好地方

【讨论】:

  • (我是新手)。我想我的困惑是——什么是图像标签?
  • @Asool 我已经更新了我的答案,希望这会有所帮助。继续花点时间阅读官方文档,我相信这会帮助您更好地理解它。
  • 当我执行docker images -a 时,会有许多名称和标签为 的图像。这些是什么以及它们使用了多少空间?以及如何检查docker images中出现的悬空图像的大小
  • docker rmi $(docker images -f dangling=true -q) 将清除所有 danling 图像
【解决方案2】:

假设你基于一个带有标签“asool/user-service”的Dockerfile构建一个镜像:

docker build -t asool/user-service .

映像已成功构建,并且 ID 为“5e8d606c6dcc”。因此,您更改了该 Dockerfile 的内容,例如你添加一行RUN apk add vim。然后,你构建一个带有相同标签“asool/user-service”的镜像:

docker build -t asool/user-service .

创建了一个新图像,标记为“asool/user-service”,具有另一个 ID。虽然出现了一个新图像,但 ID 为“5e8d606c6dcc”的旧图像仍然存在。该图像失去了它的标签,它的名字,很可能它的目的。此图像称为悬空图像。

来源:Dockerfile Tutorial by Example - ( Part I - Basics )

【讨论】:

    【解决方案3】:

    我们一个一个来:

    那么 hello-world 的图像会是未使用的图像吗??

    是的。

    那么悬空图像是如何创建的?

    在您的情况下,您可以创建相同图像的新版本,或者您可以取消标记您的图像,然后您就有一个悬空图像

    这到底是什么意思?即,创建图像的新版本是什么意思?您如何创建图像的新版本?

    您可以通过运行docker build 命令随时构建映像,甚至可以从某个地方拉取更新版本的docker pull

    什么是未标记的图像?

    每个图像都有一个标签,如文档中所述,您可以使用以下命令重新标记图像: docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG] 当您删除标记或再次构建图像​​时,通常会得到未标记的图像。

    谁能给我一个如何创建悬空图像的示例?

    好吧,我会说得很简单,只需取消标记任何图像,您就有一个悬空图像。

    最后,这里是这个问题的重复链接: Same question with answer

    【讨论】:

      猜你喜欢
      • 2021-02-01
      • 1970-01-01
      • 2017-06-01
      • 2016-02-29
      • 1970-01-01
      • 1970-01-01
      • 2020-01-15
      • 1970-01-01
      • 2020-07-22
      相关资源
      最近更新 更多