当您推送具有相同旧标签的新图像时会发生什么?

时间:2019-10-07 08:37:52

标签: docker

我是Docker的新手。

我已经对Django应用进行了容器化,当我运行容器时,它可以成功在暴露的端口上运行。

我想知道更新我的应用程序(在代码中进行更改)并再次构建图像​​并在已有图像“最新”时再次标记为“最新”时会发生什么情况吗?它会取代旧图像吗?

1 个答案:

答案 0 :(得分:3)

简短的答案:是的,新标签“覆盖”了之前的标签

更长的答案:标签的工作原理与Git中的标签工作原理类似;该标记引用图像的特定版本(内容可寻址的摘要),并且可以进行更新以指向其他版本。

覆盖标签时,旧图像本身不会被覆盖,但是标签现在指向您推送的图像的新版本。如果通过摘要引用旧图像,仍可以将其拉出(并运行)。

例如,当您拉动busybox:latest图像时,您会看到在拉动后打印的摘要:

docker pull busybox:latest

# 7c9d20b9b6cd: Pull complete 
# Digest: sha256:fe301db49df08c384001ed752dff6d52b4305a73a7f608f21528048e8a08b51e
# Status: Downloaded newer image for busybox:latest
# docker.io/library/busybox:latest

因此,除了上述内容之外,您还可以通过 digest 提取图像:

docker pull busybox@sha256:fe301db49df08c384001ed752dff6d52b4305a73a7f608f21528048e8a08b51e

# sha256:fe301db49df08c384001ed752dff6d52b4305a73a7f608f21528048e8a08b51e: Pulling from library/busybox
# Digest: sha256:fe301db49df08c384001ed752dff6d52b4305a73a7f608f21528048e8a08b51e
# Status: Image is up to date for #busybox@sha256:fe301db49df08c384001ed752dff6d52b4305a73a7f608f21528048e8a08b51e
# docker.io/library/busybox@sha256:fe301db49df08c384001ed752dff6d52b4305a73a7f608f21528048e8a08b51e

尽管busybox:latest映像的较新版本可能会在Docker Hub上出现,但如果您知道它们的摘要,仍可以运行旧版本;

docker run --rm busybox@sha256:fe301db49df08c384001ed752dff6d52b4305a73a7f608f21528048e8a08b51e echo 'hello from busybox'

# hello from busybox