我是Docker的新手。
我已经对Django应用进行了容器化,当我运行容器时,它可以成功在暴露的端口上运行。
我想知道更新我的应用程序(在代码中进行更改)并再次构建图像并在已有图像“最新”时再次标记为“最新”时会发生什么情况吗?它会取代旧图像吗?
答案 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