GNU/Linux >> Tutoriales Linux >  >> Panels >> Docker

¿Qué es un manifiesto de imagen de Docker?

Los manifiestos de Docker describen las capas dentro de una imagen. Un manifiesto permite la comparación exacta de dos imágenes, incluso si tienen diferentes etiquetas asignadas.

Los manifiestos se expresan en JSON y contienen información sobre las capas y arquitecturas de la imagen. El cliente de Docker utiliza manifiestos para determinar si una imagen es compatible con el dispositivo actual. Luego usa la información para determinar cómo iniciar nuevos contenedores.

El Formato del Manifiesto

El esquema de manifiesto se encuentra actualmente en la versión 2. Un archivo completo declarará su versión de esquema y luego una lista de entradas de manifiesto disponibles para la imagen. Cada entrada representa una variante diferente de la imagen, como x86 y ARM64.

Puede ver el manifiesto de cualquier imagen usando docker manifest inspect dominio. Esto funciona tanto con imágenes locales como con imágenes almacenadas en un registro remoto como Docker Hub.

docker manifest inspect my-image:latest

El manifiesto es una lista de capas incluidas en la imagen. Puede ver el hash del contenido de la capa y su tamaño total.

Si agrega el --verbose bandera, obtendrá aún más información sobre la imagen. Esto incluye la etiqueta de la imagen (en el Ref field), su arquitectura y su sistema operativo.

Docker no cargará detalles de manifiesto de registros inseguros de forma predeterminada. Si necesita utilizar un registro protegido incorrectamente, agregue el --insecure marcar a su docker manifest comandos.

Manifiestos y construcciones de múltiples arcos

Históricamente, Docker no admitía múltiples arquitecturas de imágenes. Las imágenes solo se pueden usar en máquinas con la misma arquitectura en la que se construyeron. Esto resultó rápidamente limitante ya que Docker encontró más uso en entornos de servidor y en máquinas más nuevas basadas en ARM.

Además de permitir la identificación única de imágenes, los manifiestos facilitan la creación de arquitecturas múltiples. Si inspecciona una imagen que admite varias arquitecturas, verá un resultado de manifiesto sutilmente diferente:

docker manifest inspect php:latest

Ejecutar el comando anterior mostrará el manifiesto de la imagen oficial de PHP Docker. Puede ver en la captura de pantalla que hay varias opciones de plataforma disponibles, incluidas AMD64 y ARM. Hemos truncado la lista completa que en realidad incluye ocho arquitecturas compatibles diferentes.

Los manifiestos permiten a los autores de imágenes anunciar la compatibilidad con varias arquitecturas bajo una etiqueta de imagen. El cliente de Docker selecciona la versión de imagen adecuada para su plataforma, según las opciones de la lista. Se espera que los autores solo agrupen imágenes que ofrezcan una funcionalidad idéntica; no debe haber cambios más allá de la arquitectura de destino o el sistema operativo.

Cada arquitectura en la lista se refiere a otra manifestar a través de su digest campo. El manifiesto al que se hace referencia será un archivo normal de arquitectura única. Docker hace coincidir la plataforma actual con el manifiesto de arco único correcto y luego carga ese archivo para determinar la lista final de capas de imágenes.

Puede crear manualmente imágenes de varias arquitecturas utilizando el docker manifest dominio. Cree cada una de las imágenes individuales y envíelas a un registro. Luego use docker manifest create comando para combinar las imágenes en un nuevo manifiesto compartido bajo una sola etiqueta.

# on an AMD64 machine
docker build -t my-image:amd64 .
docker push my-image:amd64

# on an ARM machine
docker build -t my-image:arm .
docker push my-image:arm

# now combine the manifests
docker manifest create my-image:latest 
--amend my-image:x64
--amend my-image:arm
docker manifest push my-image:latest

Usando manifest create con el --amend flag le permite fusionar varios manifiestos independientes. Luego, el manifiesto final se envía a Docker Hub con el latest etiqueta. Los usuarios de AMD64 y ARM podrán crear contenedores a partir de esta imagen.

No es obligatorio ensamblar manualmente imágenes de múltiples arcos. Puedes usar el buildx comando en su lugar para simplificar considerablemente el proceso.

docker buildx build --platform linux/amd64,linux/arm64/v8 --tag my-image:latest

Este único comando da como resultado una imagen que funciona en las plataformas AMD64 y ARM64. Debajo del capó, todavía está produciendo una lista de manifiesto de varias arquitecturas, por lo que es útil comprender el funcionamiento interno de cómo se vinculan las imágenes.

Anotación de manifiestos

Docker le permite anular manualmente los datos del manifiesto a través de anotaciones. Los campos admitidos incluyen información sobre la arquitectura y el sistema operativo.

Usa el docker manifest annotate Comando para configurar anotaciones. Si está anotando una imagen de arquitectura única, proporcione una etiqueta de imagen que haga referencia a ella. Para las imágenes de múltiples arquitecturas, necesitará tanto la etiqueta de imagen general como la etiqueta del manifiesto individual dentro de la lista de manifiestos de múltiples arquitecturas.

docker manifest annotate my-image:latest my-image:amd64 --os-version linux

Este comando marca la versión AMD64 de my-image:latest imagen como un contenedor basado en Linux.

Las anotaciones a menudo no necesitan configurarse a mano. Por lo general, se deducen automáticamente del entorno de compilación. Puedes usar el annotate Comando para agregar campos faltantes o cambiar la configuración de la imagen en el futuro.

Resumen

Los manifiestos de Docker describen las capas de una imagen y las arquitecturas que admite. Un manifiesto puede ser una arquitectura única, que admita una plataforma específica, o una arquitectura múltiple. En este último caso, el archivo contiene una lista de referencias a los manifiestos de arco único que incorpora.

La interacción manual con los manifiestos debería ser rara, pero es posible con el docker manifest grupo de mando. Ahora es más común automatizar compilaciones de varias arquitecturas a través de Buildx, que ofrece una experiencia simplificada de ensamblaje de manifiestos.


Docker
  1. ¿Qué es Docker (y los contenedores de Linux?)

  2. ¿Extraer archivo de la imagen de Docker?

  3. Cómo usar un Dockerfile para crear una imagen de Docker

  4. Cómo modificar imágenes de Docker

  5. ¿Qué hay dentro de una imagen/contenedor de Docker?

¿Qué es un manifiesto de imagen de Docker?

Implementar una instalación de MariaDB de Docker de producción

Cómo reducir el tamaño de la imagen de Docker en los contenedores de Docker

Docker File vs Docker Compose:¿Cuál es la diferencia?

Compartir imágenes de Docker en Docker Hub

Qué hacer si un contenedor Docker sale inmediatamente