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一个名为 myimage的1.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