docker中“标签”的实际用途是什么?

例如,有一个使用创build的存储库

$ docker tag friendlyhello john/get-started:part1

$ docker images

 REPOSITORY TAG IMAGE ID CREATED SIZE friendlyhello latest d9e555c53008 3 minutes ago 195MB john/get-started part1 d9e555c53008 3 minutes ago 195MB 

现在这里有两个图像: friendlyhello:latestjohn/get-started:part1

我注意到这两个图像具有相同的IMAGE ID

所以我想我的磁盘上只有一个图像文件。

如果这是真的,为什么我应该像在操作系统中创build链接文件一样标记到存储库?

简而言之 ,为了方便识别图像 (这是文件系统层组合 ),使用标签。 由于您的图像会随着时间的推移而变化,并且会看到更多的图层被添加以形成新的图像,所以标签也是进行版本控制的便捷方式。

当用户从像Docker HubGoogle Container Registry这样的注册中心下载图像时,他们可以很容易地将它们从标签下载的版本关联起来。

这与使用git标签发布没有什么不同,如果你熟悉这个版本,但是在这种情况下你正在追踪你的图片的变化。 您为您的映像添加一个发行版,并将更改推送到远程存储库。

以Ubuntu为例,标签被用来指代操作系统的特定版本,可以有很多。 例如,这些都是Ubuntu的有效标签 (请参阅docker hub的页面 ):

 rolling zesty 17.04 latest xenial 16.04 trusty 14.04 

多个标签可以指向一个容器图像 。 对于Ubuntu: xeniallatest16.04是指向相同位置的标签,这些只是许多方式来引用相同的图像。 这样,因为我知道Ubuntu的latest (稳定)版本是xenial ,版本号是16.04 ,所以我可以使用这些术语或标签从Docker Hub下载这个特定的图像。

同样的, xenialxenial不会指向相同的图像。 他们指向的图像可能有共同的文件系统层,但在某些时候有分歧。

您可以标记图像以确保您稍后能够find它们。 如果只用最新版本存储图像,则会在下一个版本中覆盖该图像,然后使用docker prune将其删除,删除所有未引用的图像。