Soy bastante nuevo en Docker y estoy un poco desconcertado por la diferencia entre etiquetar (--tag) una imagen y asignarle un nombre (--name). Por ejemplo, puedo ver que si construyo mi imagen personalizada a partir de un archivo Docker, puedo etiquetarla con un nombre:
sudo docker build --tag=tomcat-admin . sudo docker run -it tomcat-adminPasar el nombre a la ventana acoplable inspeccionar produce un resultado:
docker inspect tomcat-adminSin embargo, no contiene los mismos atributos de una imagen "nombrada":
docker inspect --format '{{ .NetworkSettings.IPAddress }}' tomcat-admin Template parsing error: template: :1:19: executing "" at <.NetworkSettings.IPA...>: map has no entry for key "NetworkSettings"
Alguien que arroje algo de luz al respecto? ¡Gracias!
Creo que mezclaste dos conceptos aquí, lo que causa la confusión. Por un lado, hay una imagen de Docker que puede considerar como un modelo para iniciar un contenedor. Por otro lado, hay contenedores que ejecutan instancias que se basan en una imagen.
Cuando docker build -t tagname . está creando una imagen y etiquétela con un formato de "nombre: etiqueta" por lo general. Entonces, por ejemplo, está construyendo su imagen como
docker build -t myimage:1.0 . que crea una nueva imagen que se llama myimage con una versión de 1.0 . Esto es lo que verá cuando ejecute docker images .
El parámetro --name luego se usa cuando crea e inicia un nuevo contenedor basado en su imagen. Entonces, por ejemplo, ejecuta un nuevo contenedor usando el siguiente comando:
docker run -it --name mycontainerinstance myimage Esto crea un nuevo contenedor basado en su imagen myimage . Esta instancia de contenedor se denomina mycontainerinstance . Puede ver esto cuando ejecuta docker ps -a que enumerará el contenedor con su nombre de contenedor mycontainerinstance .
Entonces, para comprender mejor la diferencia, eche un vistazo a los documentos para crear una imagen y ejecutar un contenedor , especificando una imagen . Al leer los documentos, notará qué comandos apuntan a una imagen y qué comandos son para contenedores. También verá que hay comandos que funcionan para imágenes y contenedores como lo hace docker inspect .
La inspección de una dirección de red, por supuesto, solo funciona cuando proporciona un nombre de contenedor, no una imagen. En su caso especial, el contenedor obtuvo un nombre generado, que puede ver ejecutando docker ps -a . Cuando proporcione este nombre al comando de docker inspect , es probable que vea la dirección IP que deseaba.
Usted etiqueta una imagen
docker build --tag=tomcat-admin .pero le asignas un nombre a un contenedor
docker run -it tomcat-adminPuede asignar varias etiquetas a las imágenes, por ejemplo
docker build --tag=tomcat-admin --tag=tomcat-admin:1.0 .Si enumera imágenes, obtiene una línea por etiqueta, pero están relacionadas con la misma identificación de imagen:
docker images |grep tomcat tomcat-admin 1.0 955395353827 11 minutes ago 188 MB tomcat-admin latest 955395353827 11 minutes ago 188 MBTambién puede etiquetar imágenes por segunda vez, no solo cuando las crea, para que pueda mantener diferentes versiones de imágenes.
Cuando ejecuta un contenedor basado en una imagen específica, puede asignarle un nombre, por lo que puede hacer referencia a él usando el nombre en lugar de usar el ID del contenedor.
Obviamente obtienes diferentes atributos al inspeccionar imágenes y contenedores. Creo que es más claro si usa un nombre diferente para la etiqueta de imagen y el nombre del contenedor, por ejemplo
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 containerLo confuso es que una etiqueta consta de un nombre y una etiqueta. En la documentación se puede ver que:
--tag , -t Name and optionally a tag in the 'name:tag' format
Entonces, si omite la parte :tag , en realidad agrega un nombre para la imagen. Eso es todo.
La diferencia entre los nombres de las imágenes y los nombres de los contenedores se explica en las respuestas de otros.