我正在浏览一本书并遇到了这条线:
一个标签只能应用于存储库中的单个图像,而单个图像可以有多个标签。例如,Docker Hub 上的 Java 存储库维护以下标签:7、7-jdk、7u71、7u71-jdk、openjdk-7 和 openjdk-7u71。所有这些标签都应用于同一图像。
我的问题是:为什么单个图像会有多个标签?用不同的标签标记同一图像的目的是什么?
我正在浏览一本书并遇到了这条线:
一个标签只能应用于存储库中的单个图像,而单个图像可以有多个标签。例如,Docker Hub 上的 Java 存储库维护以下标签:7、7-jdk、7u71、7u71-jdk、openjdk-7 和 openjdk-7u71。所有这些标签都应用于同一图像。
我的问题是:为什么单个图像会有多个标签?用不同的标签标记同一图像的目的是什么?
在我看来,主要有两个原因。
首先,这是为了方便,所以你可以给同一个图像多个别名。
但是您可以为图像提供其他(特殊)标签,以便将其推送到不同的注册表。
假设(例如)您正在使用microk8s并且您启用了注册表服务。要推送您的本地图像,您必须使用以前名为 的标签应用它localhost:32000/my-image:my-tag
。
在这种情况下,您的图像将有两个标签my-image:my-tag
和localhost:32000/my-image:my-tag
. 因此,要将其推送到microk8s注册表,您唯一需要做的就是发出命令git push localhost:32000/my-image:my-tag
(将解析图像标签以获取要推送到的注册表的 URI)。
显然,上述概念可以应用于任何其他远程注册表。
您可以将多个标签用于各种目的。例如,最受欢迎的是拥有“最新”图像。
想象一下,您正在拉取最新的 ubuntu映像。那将是“docker pull ubuntu:latest”。尝试拉 ubuntu:20.04 - 你会发现你已经拉了图像。
注意:一段时间后,ubuntu:latest 将不再是 ubuntu:20.04,而是最新的标签。但是,您将始终拥有指向最新版本 ubuntu 映像的指针,并且无论您在何处使用它,都无需更改标签。