Inspeccionar imágenes de Docker
EEste artículo cubre cuatro puntos clave sobre la verificación de imágenes Docker. Para verificar una imagen Docker, utilizaremos los tres comandos siguientes.
- docker image ls
- docker image inspect
- docker image history
Basándome en estos 3 comandos, resumiré cómo verificar la información del contenido de la imagen, ganchos de versión, etiquetas, nombres, capas, capacidad, imágenes contenedoras, Dockerfile
, etc.
1. Comando para verificar la imagen Docker
1.1. El comando ls para información general
Empecemos con el comando más común ls
para ver el contenido de la imagen docker, que te dará una idea general de lo que hay en la imagen docker que quieres.
La forma básica es
$ docker image ls [OPTIONS] [REPOSITORY[:TAG]]
En general, obtendrás una lista de todas las imágenes almacenadas actualmente en tu entorno docker, y la parte [REPOSITORIO[:ETIQUETA]]
se puede utilizar para ver el contenido de una imagen docker específica.
Por ejemplo, si especifica el nombre (nombre del repositorio) y la etiqueta (versión) de una imagen de la siguiente manera
docker image ls nginx:latest
Obtendrás la siguiente información. Desde el principio, esto es el nombre de la imagen y la información de la etiqueta, un ID único, la hora en que fue creada, y el tamaño de la imagen.
repository tag image id created size
nginx last f9c14fe76d50 4 days ago 143MB
El viejo comando Docker docker images
hace lo mismo, pero recomendamos usar el comando más nuevo y organizado.
1.2. El comando inspect para obtener más información sobre una imagen específica.
El comando ls
que vimos en la Sección 1.1 devuelve cinco piezas de información: el nombre de la imagen, la etiqueta, el ID, la hora de creación y la capacidad.
El comando inspect
imprime todos los detalles sobre una imagen dada, incluyendo éstos.
El formato por defecto es
inspect docker image [OPTIONS] IMAGE [IMAGE...]
Cuando se ejecuta el comando, se muestra una gran cantidad de información en formato JSON, que puede tomar un tiempo para desplazarse a través.
Docker proporciona la opción --format
para que no tengas que seguir imprimiendo esta gran cantidad de datos cuando sólo necesitas información específica.
Esta opción utiliza la sintaxis de plantillas Go para permitirle imprimir selectivamente sólo la información que desee.
Para más información sobre el uso de la opción `--format', véase [Inspección de Contenedores Docker - Sección 1.2] (/docker/container/inspect#1.2).
En las siguientes secciones, usaremos los comandos ls
e inspect
y la opción --format
para imprimir sólo la información que queremos.
2. Verificar el contenido de una imagen Docker
Veamos cómo comprobar el nombre, la versión/etiqueta, las capas y el tamaño de una imagen, que son preguntas frecuentes de los usuarios de Docker.
2.1. Comprobación del nombre de la imagen
Las imágenes Docker son objetos que aún no han sido instancia dos como contenedores. Como tales, no tienen un nombre, y el nombre del repositorio puede ser referido como el nombre de la imagen. El nombre del repositorio es el nombre del repositorio de Docker Hub para esa imagen, y los servicios comerciales como Ubuntu y Nginx se denominan imágenes oficiales.
Puedes ver los nombres de todas las imágenes almacenadas actualmente en tu entorno Docker mirando la entrada REPOSITORY
en la lista devuelta por el comando docker image ls
.
2.2. Comprobación de la versión/etiqueta de la imagen
Para comprobar la versión o la etiqueta de una imagen docker, primero puedes utilizar el comando ls
. Puedes comprobar la entrada TAG
en la lista de imágenes.
Alternativamente, puedes comprobar la entrada RepoTags
en la salida del comando inspect
. Para ello, ejecute el siguiente comando
$ docker image inspect --format '{ {.RepoTags} }' nginx
[nginx:latest]
$ docker image inspect --format '{ {.RepoTags} }' mariadb:10.6
[mariadb:10.6]'
2.3. Identificar las capas de la imagen
Las imágenes Docker consisten en muchas capas. Cada capa contiene tareas específicas, y diferentes imágenes pueden reutilizar la misma capa. Por lo tanto, la forma en que organices tus capas puede marcar la diferencia en el tamaño de tu imagen Docker y en la rapidez con la que se comporta.
Docker no proporciona información específica sobre las capas.
Sin embargo, puedes hacer algunas conjeturas basadas en el contenido de dos comandos: inspect
y history
.
El contenido real de la capa se puede determinar con más detalle utilizando herramientas de terceros.
En primer lugar, puede utilizar el comando inspect
para ver los valores hash de las capas contenidas en la imagen.
En la salida, busque la entrada Layers
en la entrada RootFS
. Si sólo desea ver los valores hash, puede utilizar el siguiente comando.
$ docker image inspect --format '{ {.RootFS.Layers} }' nginx
[sha256:8cbe4b54fa88d8fc0198ea0cc3a5432aea41573e6a0ee26eca8c79f9fbfa40e3 sha256:4b8862fe7056d8a3c2c0910eb38ebb8fc08785eaa1f9f53b2043bf7ca8adbafb sha256:e60266289ce4a890aaf52b93228090998e28220aef04f128704141864992dd15 sha256:7daac92f43be84ad9675f94875c1a00357b975d6c58b11d17104e0a0e04da370 sha256:5e099cf3f3c83c449b8c062f944ac025c9bf2dd7ec255837c53430021f5a1517 sha256:4fd83434130318dede62defafcc5853d03dae8636eccfa1b9dcd385d92e3ff19]
Docker no proporciona la capacidad de utilizar valores hash para recuperar el contenido de una capa en particular, por ejemplo, sólo para ver que imágenes comparten la misma capa.
Puedes ver qué capas componen una imagen y qué comandos ejecutan utilizando el comando docker image history
.
Estos comandos se basan en el Dockerfile
, por lo que no están asignados a capas específicas.
El resultado de ejecutar el comando se muestra a continuación, y puedes añadir la opción --no-trunc
para obtener información más detallada que no se omite.
$ docker image history nginx:latest
IMAGE CREATED CREATED BY SIZE COMMENT
f9c14fe76d50 5 days ago /bin/sh -c #(nop) CMD ["nginx" "-g" "daemon… 0B
<missing> 5 days ago /bin/sh -c #(nop) STOPSIGNAL SIGQUIT 0B
<missing> 5 days ago /bin/sh -c #(nop) EXPOSE 80 0B
<missing> 5 days ago /bin/sh -c #(nop) ENTRYPOINT ["/docker-entr… 0B
<missing> 5 days ago /bin/sh -c #(nop) COPY file:e57eef017a414ca7… 4.62kB
<missing> 5 days ago /bin/sh -c #(nop) COPY file:36429cfeeb299f99… 3.01kB
<missing> 5 days ago /bin/sh -c #(nop) COPY file:5c18272734349488… 2.12kB
<missing> 5 days ago /bin/sh -c #(nop) COPY file:7b307b62e82255f0… 1.62kB
<missing> 5 days ago /bin/sh -c set -x && addgroup --system -… 62MB
<missing> 5 days ago /bin/sh -c #(nop) ENV PKG_RELEASE=1~bullseye 0B
<missing> 5 days ago /bin/sh -c #(nop) ENV NJS_VERSION=0.7.12 0B
<missing> 5 days ago /bin/sh -c #(nop) ENV NGINX_VERSION=1.25.0 0B
<missing> 6 days ago /bin/sh -c #(nop) LABEL maintainer=NGINX Do… 0B
<missing> 7 days ago /bin/sh -c #(nop) CMD ["bash"] 0B
<missing> 7 days ago /bin/sh -c #(nop) ADD file:88252a7f118b4d6f5… 80.5MB
Para cosas que no puedes ver con las funciones integradas de Docker, es una buena idea utilizar una herramienta de terceros como Dive (opens in a new tab). Dive analizará tu imagen y te dirá qué contiene cada capa y cómo optimizarla. Cubriremos esto en un nuevo post, junto con otras herramientas que hacen cosas similares.
2.4. Comprobar el tamaño de la imagen
El tamaño de la imagen se muestra muy bien con el comando ls
. Puedes comprobarlo con el elemento SIZE
,
o si sólo quieres el valor de la capacidad, puedes usar el siguiente comando.
$ docker image ls --format '{ {.Size} }' nginx:latest
l43MB
El contenido del comando inspect
te dará la capacidad en bytes, y puedes comprobar la entrada Size
.
$ docker image inspect --format '{ {.Size} }' nginx
142560184
3. Comprobación de las imágenes en un contenedor específico
Puedes ver los nombres de las imágenes en un contenedor específico con el comando container ls
.
$ docker container ls --all
CONTAINER ID IMAGE COMMAND ...
55d8d5e95e61 mariadb:10.6 "docker-entrypoint.s…"
Alternativamente, puede encontrar más detalles, incluyendo variables de entorno, en la sección Config.Image
de los resultados de ejecutar el comando container inspect
.
$ docker container inspect --format '{ {.Config.Image} }' 55d8mariadb:10.6
4. Comprueba el dockerfile de la imagen
Las imágenes Docker se crean basándose en un Dockerfile
, y las imágenes que ya han sido creadas no almacenan información sobre el Dockerfile
.
Podemos inferir el contenido del Dockerfile
hasta cierto punto a través del comando history
que discutimos en Sección 2.'3, pero hay algunos comandos que no existen en el historial, como ADD
y COPY
.
Así que si tu imagen se puede buscar en Docker Hub, deberías buscar en el contenido, y si es una imagen personalizada, también deberías compartir el Dockerfile
.
5. Conclusión
En este artículo, hemos resumido cómo comprobar la información del contenido de la imagen basándonos en tres comandos: ls
, inspect
, y history
, y cómo comprobar etiquetas, nombres, capas, capacidad, imágenes contenedoras, y Dockerfile
para ganchos de versión.
Espero que encuentres esto útil cuando necesites comprobar el contenido de las imágenes.
