Docker:悬挂图像
Docker: Dangling Images
我正在尝试理解以下命令
docker image prune
docker image prune -a
根据文档
docker image prune: Removes dangling images
docker image prune -a: Removes dangling and unused images`
我正在尝试了解悬空图像和未使用图像之间的区别。
根据 post,未使用的图像是尚未在容器中分配或使用的图像。
所以基本上,如果我 运行
docker pull hello-world
(从未执行过命令docker run hello-world
)
那么hello-world的图片就是未使用的图片??
悬挂图像是如何创建的?
根据上面引用的堆栈溢出 post,“悬空图像只是意味着您已经创建了新的图像构建,但没有给它一个新名称。所以旧图像你已经成为 'dangling image'."
这到底是什么意思?即,创建一个新的镜像是什么意思?你如何创建一个新的图像?什么是未标记图像?
谁能给我一个悬挂图像是如何创建的例子吗?
假设您基于带有标签 "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”的旧镜像仍然存在。那张图片失去了它的标签、它的名字,很可能还有它的用途。此图像称为悬挂图像。
让我们一一道来:
Then the image for hello-world would be an unused image??
是的。
How are dangling images created then?
在您的情况下,您可以创建同一图像的新版本,或者您可以取消标记您的图像,然后您有一个悬挂图像。
What exactly does that mean? I.e, what does it mean to create a new build of the image? How do you create a new build of the image?
您可以随时通过 运行 docker build
命令构建映像,甚至可以从某处拉取更新版本 docker pull
。
What are untagged images?
每个图像都有一个标签,如文档中所述,您可以使用以下命令重新标记图像:
docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
当您删除标记或再次构建图像时,通常您最终会得到未标记的图像。
Can someone give me an example of how a dangling image is created?
嗯,我想说的很简单,只要取消任何图像的标签,你就会有一个悬空图像。
最后,针对此问题重复link:
悬挂图片仅表示您有一张图片,但没有附加标签。 (Prune unused Docker objects)
你是怎么达到的? 通过构建具有相同名称和相同标签的图像。这是通常的情况,而不是唯一的。
- 您构建了一个图像
my.image.example.com
并用 latest
标记了它。
- 您可以通过将其引用为
my.image.example.com:lastest
来推送/拉取您的镜像
- 你做了一些改变,重建了你的形象。与您在第 1 步中所做的相同。
- 您有一个新的图像 ID,具有相同的名称和相同的标签。
- 第一张图片现在 悬空 ,您只能使用它的完整 SHA 来解决它。
这是对图像标签的高度抽象描述;
大多数(如果不是全部)计算机软件都由名称和版本组成。例如,您的 OS 可能是 Windows 10、OSX Catalina (14 Mojave) 等
在容器领域,镜像标签用于解决软件的版本问题。图像名称 - 是软件本身。
下载图像时,指定图像名称及其“版本”(即标签)。这是常见的用例。
标签可用于多种用途;单个图像可以有多个标签,但不能有一个标签引用多个图像。
我认为 Docker overview 是了解平台基本背景的好地方
我正在尝试理解以下命令
docker image prune
docker image prune -a
根据文档
docker image prune: Removes dangling images
docker image prune -a: Removes dangling and unused images`
我正在尝试了解悬空图像和未使用图像之间的区别。
根据
所以基本上,如果我 运行
docker pull hello-world
(从未执行过命令docker run hello-world
)
那么hello-world的图片就是未使用的图片??
悬挂图像是如何创建的?
根据上面引用的堆栈溢出 post,“悬空图像只是意味着您已经创建了新的图像构建,但没有给它一个新名称。所以旧图像你已经成为 'dangling image'."
这到底是什么意思?即,创建一个新的镜像是什么意思?你如何创建一个新的图像?什么是未标记图像?
谁能给我一个悬挂图像是如何创建的例子吗?
假设您基于带有标签 "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”的旧镜像仍然存在。那张图片失去了它的标签、它的名字,很可能还有它的用途。此图像称为悬挂图像。
让我们一一道来:
Then the image for hello-world would be an unused image??
是的。
How are dangling images created then?
在您的情况下,您可以创建同一图像的新版本,或者您可以取消标记您的图像,然后您有一个悬挂图像。
What exactly does that mean? I.e, what does it mean to create a new build of the image? How do you create a new build of the image?
您可以随时通过 运行 docker build
命令构建映像,甚至可以从某处拉取更新版本 docker pull
。
What are untagged images?
每个图像都有一个标签,如文档中所述,您可以使用以下命令重新标记图像:
docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
当您删除标记或再次构建图像时,通常您最终会得到未标记的图像。
Can someone give me an example of how a dangling image is created?
嗯,我想说的很简单,只要取消任何图像的标签,你就会有一个悬空图像。
最后,针对此问题重复link:
悬挂图片仅表示您有一张图片,但没有附加标签。 (Prune unused Docker objects)
你是怎么达到的? 通过构建具有相同名称和相同标签的图像。这是通常的情况,而不是唯一的。
- 您构建了一个图像
my.image.example.com
并用latest
标记了它。 - 您可以通过将其引用为
my.image.example.com:lastest
来推送/拉取您的镜像
- 你做了一些改变,重建了你的形象。与您在第 1 步中所做的相同。
- 您有一个新的图像 ID,具有相同的名称和相同的标签。
- 第一张图片现在 悬空 ,您只能使用它的完整 SHA 来解决它。
这是对图像标签的高度抽象描述;
大多数(如果不是全部)计算机软件都由名称和版本组成。例如,您的 OS 可能是 Windows 10、OSX Catalina (14 Mojave) 等
在容器领域,镜像标签用于解决软件的版本问题。图像名称 - 是软件本身。
下载图像时,指定图像名称及其“版本”(即标签)。这是常见的用例。 标签可用于多种用途;单个图像可以有多个标签,但不能有一个标签引用多个图像。
我认为 Docker overview 是了解平台基本背景的好地方