Cómo usar el comando docker manifest push para enviar una lista de manifiestos

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ás cómo utilizar de manera efectiva el comando docker manifest push para gestionar imágenes multi-arquitectura. Comenzaremos creando una lista de manifiestos, que permite que un solo nombre de imagen se refiera a imágenes construidas para diferentes arquitecturas y sistemas operativos.

Después de crear la lista de manifiestos, practicarás enviarla a un registro estándar y también explorarás cómo enviarla a un registro no seguro. Finalmente, aprenderás cómo enviar y luego eliminar la lista de manifiestos local, asegurando una gestión eficiente de tus imágenes Docker.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker(("Docker")) -.-> docker/SystemManagementGroup(["System Management"]) docker/ContainerOperationsGroup -.-> docker/run("Run a Container") docker/ContainerOperationsGroup -.-> docker/stop("Stop Container") docker/ContainerOperationsGroup -.-> docker/rm("Remove Container") docker/ContainerOperationsGroup -.-> docker/inspect("Inspect Container") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") docker/ImageOperationsGroup -.-> docker/tag("Tag an Image") docker/ImageOperationsGroup -.-> docker/push("Push Image to Repository") docker/SystemManagementGroup -.-> docker/login("Log into Docker Registry") subgraph Lab Skills docker/run -.-> lab-555171{{"Cómo usar el comando docker manifest push para enviar una lista de manifiestos"}} docker/stop -.-> lab-555171{{"Cómo usar el comando docker manifest push para enviar una lista de manifiestos"}} docker/rm -.-> lab-555171{{"Cómo usar el comando docker manifest push para enviar una lista de manifiestos"}} docker/inspect -.-> lab-555171{{"Cómo usar el comando docker manifest push para enviar una lista de manifiestos"}} docker/pull -.-> lab-555171{{"Cómo usar el comando docker manifest push para enviar una lista de manifiestos"}} docker/tag -.-> lab-555171{{"Cómo usar el comando docker manifest push para enviar una lista de manifiestos"}} docker/push -.-> lab-555171{{"Cómo usar el comando docker manifest push para enviar una lista de manifiestos"}} docker/login -.-> lab-555171{{"Cómo usar el comando docker manifest push para enviar una lista de manifiestos"}} end

Crear una lista de manifiestos

En este paso, aprenderemos cómo crear una lista de manifiestos utilizando el comando docker manifest create. Una lista de manifiestos es una lista de manifiestos de imágenes que te permite utilizar un solo nombre para referirte a imágenes destinadas a diferentes arquitecturas y sistemas operativos. Esto es especialmente útil para construir imágenes multi-arquitectura.

Primero, vamos a descargar dos imágenes diferentes que utilizaremos para crear nuestra lista de manifiestos. Utilizaremos la imagen alpine para las arquitecturas amd64 y arm64.

docker pull alpine:latest
docker pull arm64v8/alpine:latest

Deberías ver una salida que indique que las imágenes se están descargando.

latest: Pulling from library/alpine
...
Status: Downloaded newer image for alpine:latest
latest: Pulling from arm64v8/alpine
...
Status: Downloaded newer image for arm64v8/alpine:latest

Ahora, crearemos una lista de manifiestos llamada my-alpine:latest que incluya las dos imágenes que acabamos de descargar. La sintaxis es docker manifest create MANIFEST_LIST IMAGE [IMAGE...].

docker manifest create my-alpine:latest alpine:latest arm64v8/alpine:latest

Si el comando tiene éxito, no verás ninguna salida. Este comando crea una lista de manifiestos local. Para ver la información de la lista de manifiestos, puedes utilizar el comando docker manifest inspect.

docker manifest inspect my-alpine:latest

Deberías ver una salida similar a esta, que muestra los detalles de la lista de manifiestos, incluyendo los manifiestos para las arquitecturas amd64 y arm64.

{
  "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": "arm64",
        "os": "linux"
      }
    }
  ]
}

Esto confirma que la lista de manifiestos my-alpine:latest se ha creado con éxito y que incluye las imágenes especificadas.

Enviar la lista de manifiestos a un registro

En este paso, enviaremos la lista de manifiestos que creamos en el paso anterior a un registro de Docker. Por defecto, docker push envía imágenes individuales. Para enviar una lista de manifiestos, debes utilizar el comando docker manifest push.

Antes de enviar la lista, necesitamos un registro al que enviarla. Para este laboratorio, utilizaremos Docker Hub. Si no tienes una cuenta en Docker Hub, puedes crear una de forma gratuita. Tendrás que iniciar sesión en Docker Hub desde tu terminal.

docker login

Se te pedirá que ingreses tu nombre de usuario y contraseña de Docker Hub. Ingresa tus credenciales para iniciar sesión.

Login with your Docker ID to push and pull images, scan them for vulnerabilities, sign and attest to them, and more.
Username: your_docker_username
Password: your_docker_password
Login Succeeded

Ahora que has iniciado sesión, puedes enviar la lista de manifiestos. El formato para enviar a Docker Hub es tu_nombre_de_usuario_de_Docker_Hub/nombre_de_la_lista_de_manifiestos:etiqueta. Supongamos que tu nombre de usuario de Docker Hub es tu_nombre_de_usuario_de_Docker_Hub. Reemplaza tu_nombre_de_usuario_de_Docker_Hub con tu verdadero nombre de usuario de Docker Hub.

docker manifest push your_docker_username/my-alpine:latest

Deberías ver una salida que indique que la lista de manifiestos y las imágenes asociadas se están enviando al registro.

Pushed manifest list your_docker_username/my-alpine:latest

Después de que se complete el envío, puedes verificar que la lista de manifiestos exista en tu repositorio de Docker Hub visitando el sitio web de Docker Hub o descargando la imagen en una arquitectura diferente.

Enviar la lista de manifiestos a un registro no seguro

En este paso, exploraremos cómo enviar una lista de manifiestos a un registro no seguro. Un registro no seguro es un registro que no utiliza certificados TLS/SSL, lo cual no se recomienda para entornos de producción, pero puede ser útil para pruebas o redes internas.

Por defecto, Docker requiere conexiones seguras a los registros. Para enviar a un registro no seguro, debes configurar el demonio de Docker para permitir conexiones no seguras a esa dirección de registro específica.

Para este laboratorio, simularemos un registro no seguro utilizando un registro local que se ejecuta sin TLS. Primero, ejecutemos un contenedor de registro local. Mapearemos el puerto 5000 del host al puerto 5000 del contenedor.

docker run -d -p 5000:5000 --name registry registry:2

Deberías ver una salida similar a esta, que indica que el contenedor está en ejecución:

Unable to find image 'registry:2' locally
2: Pulling from library/registry
...
Status: Downloaded newer image for registry:2
a1b2c3d4e5f6...

Ahora, necesitamos configurar el demonio de Docker para confiar en este registro no seguro en localhost:5000. Esto requiere modificar el archivo de configuración del demonio de Docker. La ubicación de este archivo puede variar, pero en la mayoría de los sistemas Linux, es /etc/docker/daemon.json.

Utilizaremos sudo nano para editar este archivo.

sudo nano /etc/docker/daemon.json

Si el archivo no existe, puedes crearlo. Agrega o modifica la clave insecure-registries para incluir localhost:5000. El contenido del archivo debería verse así:

{
  "insecure-registries": ["localhost:5000"]
}

Guarda el archivo y sal del editor (Ctrl+X, Y, Enter en nano).

Después de modificar la configuración, debes reiniciar el demonio de Docker para que los cambios surtan efecto.

sudo systemctl restart docker

Ahora, puedes etiquetar la lista de manifiestos con la dirección del registro no seguro y enviarla. Utilizaremos la lista de manifiestos my-alpine:latest creada en el primer paso.

docker manifest create localhost:5000/my-alpine:latest alpine:latest arm64v8/alpine:latest
docker manifest push localhost:5000/my-alpine:latest

Deberías ver una salida que indique que el envío es exitoso, incluso aunque el registro sea no seguro.

Pushed manifest list localhost:5000/my-alpine:latest

Esto demuestra cómo enviar una lista de manifiestos a un registro no seguro después de configurar el demonio de Docker.

Enviar y eliminar la lista de manifiestos local

En este paso, aprenderemos cómo enviar una lista de manifiestos y eliminar automáticamente la copia local después de un envío exitoso. Esto puede ser útil para limpiar tu entorno local después de enviar imágenes de múltiples arquitecturas.

El comando docker manifest push tiene una bandera --purge que elimina la lista de manifiestos local después de que se haya enviado exitosamente al registro.

Primero, asegúrate de tener la lista de manifiestos my-alpine:latest localmente. La creamos en el primer paso. Puedes inspeccionarla para confirmar su existencia.

docker manifest inspect my-alpine:latest

Deberías ver los detalles de la lista de manifiestos como antes.

Ahora, enviaremos esta lista de manifiestos a Docker Hub nuevamente, pero esta vez usaremos la bandera --purge. Recuerda reemplazar tu_nombre_de_usuario_de_Docker_Hub con tu verdadero nombre de usuario de Docker Hub.

docker manifest push --purge your_docker_username/my-alpine:latest

Deberías ver una salida que indique que el envío está en progreso y luego un mensaje que confirme que la lista de manifiestos ha sido eliminada.

Pushed manifest list your_docker_username/my-alpine:latest
Purged manifest list your_docker_username/my-alpine:latest

Después de que se complete el comando, la lista de manifiestos local my-alpine:latest ya no debería existir. Puedes verificar esto intentando inspeccionarla nuevamente.

docker manifest inspect my-alpine:latest

Esta vez, deberías ver un mensaje de error que indique que la lista de manifiestos no se encuentra.

no such manifest: my-alpine:latest

Esto confirma que la bandera --purge eliminó exitosamente la lista de manifiestos local después de enviarla al registro.

Finalmente, limpiemos el contenedor del registro no seguro local que iniciamos en el paso anterior.

docker stop registry
docker rm registry

Deberías ver una salida que confirme que el contenedor se ha detenido y eliminado.

registry
registry

Resumen

En este laboratorio, aprendimos cómo usar el comando docker manifest para gestionar imágenes de múltiples arquitecturas. Comenzamos descargando dos versiones de la imagen alpine para diferentes arquitecturas. Luego, usamos docker manifest create para combinar estas imágenes en una única lista de manifiestos, lo que nos permite referirnos a ellas con un solo nombre. Verificamos la creación de la lista de manifiestos utilizando docker manifest inspect.

Posteriormente, exploramos cómo enviar esta lista de manifiestos a un registro de Docker utilizando docker manifest push. También cubrimos el caso específico de enviar a un registro no seguro agregando la bandera --insecure. Finalmente, aprendimos cómo enviar la lista de manifiestos y, al mismo tiempo, eliminar la copia local utilizando la bandera --purge con el comando docker manifest push.