Docker – 标签vs – 名称的澄清

我对docker工作人员相当陌生,我对标签(–tag)和图像名称(–name)之间的区别感到困惑。 例如,我可以看到,如果我从Docker文件构build自定义映像,则可以使用名称对其进行标记:

sudo docker build --tag=tomcat-admin . sudo docker run -it tomcat-admin 

把名字传给docker工检查产生一个结果:

 docker inspect tomcat-admin 

但是,它不包含“命名”图像的相同属性:

 docker inspect --format '{{ .NetworkSettings.IPAddress }}' tomcat-admin Template parsing error: template: :1:19: executing "" at <.NetworkSettings.IPA...>: map has no entry for key "NetworkSettings 

有人对此有所了解? 谢谢!

我想你在这里混淆了两个概念,造成了混乱。 一方面有一个Docker镜像,你可以把它看作启动一个容器的蓝图。 另一方面,有些容器正在运行基于图像的实例。

docker build -t tagname . 你正在创build一个图像,并通常使用“name:tag”格式进行标记。 例如,你正在build立你的形象

 docker build -t myimage:1.0 . 

这会创build一个名为 myimage1.0 版本的新映像。 这是您运行docker images时将看到的内容。

当你根据你的图像创build和启动一个新的容器时,就会使用--name参数。 因此,例如,您使用以下命令运行一个新的容器:

 docker run -it --name mycontainerinstance myimage 

这会根据您的图像myimage创build一个新的容器。 这个容器实例名为mycontainerinstance 。 你可以在运行docker ps -a时看到这个,它将列出容器名称为mycontainerinstance的容器。

所以为了更好地理解它们之间的区别,请查看构build映像和运行容器的文档, 指定映像 。 在阅读文档时,您会注意到哪些命令是针对图像的,哪些命令是针对容器的。 你也会看到,有像Docker检查那样的图像和容器的命令。

检查一个networking地址当然只适用于你提供容器名称,而不是图像。 在你的特殊情况下,容器有一个生成的名字,你可以通过运行docker ps -a来看到。 当你提供这个名字给docker inspect命令时,你可能会看到你想要的ip地址。

您标记图像

 docker build --tag=tomcat-admin . 

但是你给一个容器分配一个名字

 docker run -it tomcat-admin 

您可以将多个标签分配给图像,例如

 docker build --tag=tomcat-admin --tag=tomcat-admin:1.0 . 

如果列出图像,则每个标签都会显示一行,但它们与相同的图像ID相关:

 docker images |grep tomcat tomcat-admin 1.0 955395353827 11 minutes ago 188 MB tomcat-admin latest 955395353827 11 minutes ago 188 MB 

您也可以第二次为图片添加标签,而不仅仅是在构build图片时,您可以保留不同的图片版本。

在基于特定映像运行容器时,可以为其指定一个名称,以便可以使用名称而不是使用containerId来引用它。

显然你通过检查图像和容器来获得不同的属性。 我认为,如果你使用不同的图像标签和容器名称,比如说,

 docker build --tag=tomcat-admin . docker run -d -ti --name=tomcat-admin-container tomcat-admin docker inspect tomcat-admin ==> You inspect the image docker inspect tomcat-admin-container ==> You inspect the container