Cómo usar el comando docker manifest inspect para ver los manifiestos de imágenes

DockerDockerBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, aprenderá cómo utilizar el comando docker manifest inspect para ver los manifiestos de imágenes. Comenzaremos descargando una imagen Docker de múltiples arquitecturas, específicamente la imagen alpine, para entender cómo Docker maneja las imágenes en diferentes arquitecturas.

Después de descargar la imagen, utilizará docker manifest inspect para examinar la lista de manifiestos asociada con la imagen de múltiples arquitecturas. Luego profundizará al inspeccionar un manifiesto de imagen específico dentro de esa lista y, finalmente, explorará la opción de salida detallada del comando docker manifest inspect para obtener una comprensión integral de los detalles del manifiesto de la imagen.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker/ContainerOperationsGroup -.-> docker/inspect("Inspect Container") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") subgraph Lab Skills docker/inspect -.-> lab-555170{{"Cómo usar el comando docker manifest inspect para ver los manifiestos de imágenes"}} docker/pull -.-> lab-555170{{"Cómo usar el comando docker manifest inspect para ver los manifiestos de imágenes"}} end

Descargar una imagen de múltiples arquitecturas

En este paso, aprenderemos cómo descargar una imagen Docker de múltiples arquitecturas. Una imagen de múltiples arquitecturas es una etiqueta de imagen única que se puede utilizar en diferentes arquitecturas (como amd64, arm64, etc.). Cuando descargas una imagen de múltiples arquitecturas, Docker selecciona automáticamente la capa de imagen correcta para la arquitectura de tu sistema.

Descargaremos la imagen alpine, que es una distribución Linux ligera comúnmente utilizada en contenedores Docker. La imagen alpine está disponible como una imagen de múltiples arquitecturas.

Para descargar la imagen alpine, abre tu terminal y ejecuta el siguiente comando:

docker pull alpine

Este comando le dice a Docker que descargue la última versión de la imagen alpine de Docker Hub. Dado que alpine es una imagen de múltiples arquitecturas, Docker descargará las capas de imagen adecuadas para la arquitectura de tu máquina virtual (VM) de LabEx.

Deberías ver una salida similar a esta, lo que indica que Docker está descargando la imagen:

Using default tag: latest
latest: Pulling from library/alpine
... (output showing download progress)
Digest: sha256:...
Status: Downloaded newer image for alpine:latest
docker.io/library/alpine:latest

La línea Digest muestra el identificador único para el manifiesto de imagen específico que se descargó para tu arquitectura.

Después de que el comando termine, la imagen alpine estará disponible en tu máquina virtual de LabEx y lista para ser utilizada para ejecutar contenedores.

Inspeccionar la lista de manifiestos de la imagen de múltiples arquitecturas

En el paso anterior, descargamos la imagen alpine. Dado que alpine es una imagen de múltiples arquitecturas, la etiqueta alpine:latest en realidad se refiere a una lista de manifiestos. Una lista de manifiestos es una lista de manifiestos de imágenes, cada uno para una arquitectura diferente. Cuando descargas una imagen de múltiples arquitecturas, Docker utiliza la lista de manifiestos para encontrar el manifiesto de imagen correcto para tu sistema.

Para ver la lista de manifiestos de la imagen alpine:latest, podemos utilizar el comando docker manifest inspect. Este comando te permite ver los detalles de un manifiesto de imagen o de una lista de manifiestos.

Ejecuta el siguiente comando en tu terminal:

docker manifest inspect alpine:latest

Este comando mostrará un documento JSON que representa la lista de manifiestos de la imagen alpine:latest. La salida mostrará una lista de manifests, cada uno correspondiente a una arquitectura diferente (como amd64, arm64, arm/v7, etc.). Cada manifiesto en la lista tendrá detalles como la platform (arquitectura y sistema operativo) y el digest (un identificador único para el manifiesto de imagen de esa arquitectura específica).

Verás una salida similar a esta (los digests exactos y el número de manifiestos pueden variar):

{
   "schemaVersion": 2,
   "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json",
   "manifests": [
      {
         "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
         "size": 528,
         "digest": "sha256:...",
         "platform": {
            "architecture": "amd64",
            "os": "linux"
         }
      },
      {
         "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
         "size": 528,
         "digest": "sha256:...",
         "platform": {
            "architecture": "arm",
            "os": "linux",
            "variant": "v6"
         }
      },
      ...
   ]
}

Esta salida confirma que alpine:latest es en realidad una lista de manifiestos que contiene manifiestos para varias arquitecturas. Así es como Docker sabe qué imagen específica descargar para tu sistema cuando utilizas una etiqueta de múltiples arquitecturas.

Inspeccionar un manifiesto de imagen específico dentro de la lista

En el paso anterior, inspeccionamos la lista de manifiestos de alpine:latest. Esta lista contenía múltiples entradas, cada una apuntando a un manifiesto de imagen específico para una arquitectura diferente. Ahora, inspeccionemos uno de estos manifiestos de imagen específicos.

Para inspeccionar un manifiesto específico, necesitamos su digest. A partir de la salida de docker manifest inspect alpine:latest, encuentra el digest para la arquitectura que coincide con tu máquina virtual (VM) de LabEx (que es amd64). El digest tendrá un aspecto similar a sha256:....

Una vez que tengas el digest para el manifiesto amd64, puedes inspeccionarlo utilizando el comando docker manifest inspect seguido del nombre de la imagen y el digest, separados por un símbolo @.

Reemplaza YOUR_AMD64_DIGEST con el digest real que encontraste para la plataforma amd64 en la salida del paso anterior.

docker manifest inspect alpine@YOUR_AMD64_DIGEST

Por ejemplo, si el digest de amd64 fuera sha256:f70734b6a266dcb51c52a820c34f3204cc6897445f6510b7a5be74d30a72f227, el comando sería:

docker manifest inspect alpine@sha256:f70734b6a266dcb51c52a820c34f3204cc6897445f6510b7a5be74d30a72f227

Este comando mostrará un documento JSON que representa el manifiesto de imagen específico para la arquitectura amd64. Este manifiesto contiene detalles sobre las capas de la imagen (identificadas por sus digests) y la configuración de la imagen (también identificada por un digest).

Verás una salida similar a esta:

{
  "schemaVersion": 2,
  "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
  "config": {
    "mediaType": "application/vnd.docker.container.image.v1+json",
    "size": 1510,
    "digest": "sha256:..."
  },
  "layers": [
    {
      "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
      "size": 2803897,
      "digest": "sha256:..."
    }
  ]
}

Esta salida muestra la estructura de un solo manifiesto de imagen, enumerando la configuración y las capas que componen la imagen para esa arquitectura específica.

Inspeccionar el manifiesto con salida detallada

En los pasos anteriores, inspeccionamos la lista de manifiestos y un manifiesto de imagen específico. La salida predeterminada de docker manifest inspect proporciona un resumen del manifiesto o de la lista de manifiestos. Para obtener información más detallada, incluyendo la configuración completa de la imagen, podemos utilizar la opción --verbose.

Vamos a inspeccionar de nuevo la lista de manifiestos de alpine:latest, pero esta vez con la opción --verbose. Esto mostrará la lista de manifiestos y, para cada manifiesto en la lista, también mostrará los detalles completos de la configuración.

Ejecuta el siguiente comando en tu terminal:

docker manifest inspect --verbose alpine:latest

Este comando mostrará un documento JSON más extenso. Para cada entrada en la lista manifests, ahora verás un campo adicional llamado Config. Este campo Config contiene la configuración completa de la imagen para esa arquitectura específica, incluyendo detalles como el punto de entrada, el comando, las variables de entorno, el directorio de trabajo y más.

Verás una salida similar a esta (los detalles exactos en la sección Config variarán):

{
   "schemaVersion": 2,
   "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json",
   "manifests": [
      {
         "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
         "size": 528,
         "digest": "sha256:...",
         "platform": {
            "architecture": "amd64",
            "os": "linux"
         },
         "Config": {
            "Env": [
               "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
            ],
            "Entrypoint": [
               "/bin/sh"
            ],
            "Cmd": null,
            "WorkingDir": "/",
            ...
         }
      },
      ...
   ]
}

Utilizar la opción --verbose es útil cuando necesitas ver la configuración detallada de las imágenes dentro de una lista de manifiestos, lo que puede ser útil para depurar o entender cómo está configurada una imagen específica.

Resumen

En este laboratorio (lab), aprendimos cómo usar el comando docker manifest inspect para ver los manifiestos de imágenes. Comenzamos descargando (pulling) una imagen multi-arquitectura, alpine, y comprendimos que una sola etiqueta (tag) puede representar imágenes para diferentes arquitecturas.

Luego, usamos docker manifest inspect para ver la lista de manifiestos asociada con la imagen multi-arquitectura, que detalla los manifiestos de imágenes disponibles para varias arquitecturas. Finalmente, exploramos cómo inspeccionar un manifiesto de imagen específico dentro de la lista y cómo obtener información más detallada utilizando la opción de salida detallada (verbose output).