假设我将其作为 gitlab 构建管道的一部分:
- docker build -t ${CI_REGISTRY_IMAGE}/myimage:latest -t ${CI_REGISTRY_IMAGE}/myimage:$CI_VERSION . - docker push --all-tags ${CI_REGISTRY_IMAGE}/myimage
现在我不太明白标签方面发生了什么。最新标签是否会应用于推送到容器注册表中的每个映像,以便多个映像都有此标签?或者容器注册表会确保只有一个可用的最新标签,该标签将引用已推送的最新容器映像。
另外,为什么每个人都在谈论“推送标签”,而实际上你是在推送容器镜像?如果我只推送某个图片的一个标签而不推送另一个标签,会发生什么情况,该图片会只推送一个标签吗?
假设您使用第一个命令创建这两个标签:
latest
1.0.0
这些只是指代您刚刚创建的图像 ID 的名称,例如
0e5574283393
当您推送标签时,您正在更新属于注册表中某个名称(例如
latest
)的图像 ID。如果服务器上不存在该图像 ID,则图像也会被推送。
如果稍后您使用您可能创建的相同命令构建新图像:
latest
1.0.1
现在您将拥有以下引用图像 ID 的标签:
标签 | 图像ID |
---|---|
最新 | 0e342283393 |
1.0.1 | 0e342283393 |
1.0.0 | 0e5574283393 |
所以
latest
只是应该引用最后构建的图像的名称,但实际上您可以将任何图像放在这个名称后面