具有相同存储库的图像不同标记

时间:2017-12-28 14:46:32

标签: docker

本地我有这些图片:

myrepo/imagexxx    1                   f5d32d07d008        1 weeks ago         2.44GB
myrepo/imagexxx    latest              f5d32d07d008        1 weeks ago         2.44GB

如果您注意到,相同的存储库名称,ID和大小。只有标签不同。

第一个问题:我很确定我没有使用docker commit或docker build / push使用标记1来标记新图像。这是某种默认方式吗?

第二个问题:在docker run / create / pull上,如果我没有传递特定的标签,那就是"最新的"正在使用的图像?

由于

2 个答案:

答案 0 :(得分:2)

  

第一个问题:我很确定我没有使用标记新图像   docker commit或docker build / push with tag 1.这是某种类型   默认某种程度?

不,如果未指定任何标记,则默认标记为latest

  

第二个问题:在docker run / create / pull上,如果我没有传递特定的   标签,是最新的"正在使用的图像?

答案 1 :(得分:0)

图像由图像ID标识,这是不会改变的不可变部分。它指向一组不变的文件系统层和一些图像元数据(在图像ID上运行docker inspect时看到的json)。用于提取,推送和运行映像的用户可读名称是包含注册表/存储库和标记的引用。您可以将多个引用指向同一个图像(如上例所示),它们可以更改它们指向的图像ID,并且您最终可能会得到一个图像ID,而没有任何引用指向它。

  

第一个问题:我很确定我没有使用docker commit或docker build / push with tag 1来标记新图像。这是某种默认方式吗?

您不太可能提交并创建相同的图片ID。很可能你做了拉动或跑步(跑步会隐含地执行拉动)。您可能已使用相同的Dockerfile执行构建以标记新名称,其中缓存了Dockerfile中的所有步骤。您可能已执行docker tag来创建对现有图像的新引用。

  

第二个问题:在docker run / create / pull上,如果我没有传递特定标签,是否正在使用“最新”图像?

如果不指定标记,则docker将默认为:latest。最好将其理解为“默认”,因为它不一定是最近推送到该存储库的映像。这是执行docker rundocker pull时的默认标记,但如果您执行的docker push没有标记,则默认为推送存储库的所有标记。

您可以使用docker image rm命令安全地删除图像的额外标记。如果有多个标签,则删除标签本身。如果只有一个标记,则该图像也将从本地docker主机(而不是从注册表服务器)中删除。