Comment utiliser la commande docker manifest push pour envoyer une liste de manifestes

DockerDockerBeginner
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce laboratoire, vous apprendrez à utiliser efficacement la commande docker manifest push pour gérer les images multi-architecture. Nous commencerons par créer une liste de manifestes, qui permet à un seul nom d'image de faire référence à des images construites pour différentes architectures et systèmes d'exploitation.

Après avoir créé la liste de manifestes, vous pratiquerez son envoi à un registre standard et explorerez également comment l'envoyer à un registre non sécurisé. Enfin, vous apprendrez à envoyer puis à purger la liste de manifestes locale, garantissant ainsi une gestion efficace de vos images 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{{"Comment utiliser la commande docker manifest push pour envoyer une liste de manifestes"}} docker/stop -.-> lab-555171{{"Comment utiliser la commande docker manifest push pour envoyer une liste de manifestes"}} docker/rm -.-> lab-555171{{"Comment utiliser la commande docker manifest push pour envoyer une liste de manifestes"}} docker/inspect -.-> lab-555171{{"Comment utiliser la commande docker manifest push pour envoyer une liste de manifestes"}} docker/pull -.-> lab-555171{{"Comment utiliser la commande docker manifest push pour envoyer une liste de manifestes"}} docker/tag -.-> lab-555171{{"Comment utiliser la commande docker manifest push pour envoyer une liste de manifestes"}} docker/push -.-> lab-555171{{"Comment utiliser la commande docker manifest push pour envoyer une liste de manifestes"}} docker/login -.-> lab-555171{{"Comment utiliser la commande docker manifest push pour envoyer une liste de manifestes"}} end

Créer une liste de manifestes

Dans cette étape, nous apprendrons à créer une liste de manifestes en utilisant la commande docker manifest create. Une liste de manifestes est une liste de manifestes d'images, qui vous permet d'utiliser un seul nom pour faire référence à des images destinées à différentes architectures et systèmes d'exploitation. Cela est particulièrement utile pour la construction d'images multi-architecture.

Tout d'abord, téléchargeons deux images différentes que nous utiliserons pour créer notre liste de manifestes. Nous utiliserons l'image alpine pour les architectures amd64 et arm64.

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

Vous devriez voir un affichage indiquant que les images sont en cours de téléchargement.

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

Maintenant, nous allons créer une liste de manifestes nommée my-alpine:latest qui inclut les deux images que nous venons de télécharger. La syntaxe est docker manifest create MANIFEST_LIST IMAGE [IMAGE...].

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

Si la commande réussit, vous ne verrez aucun affichage. Cette commande crée une liste de manifestes locale. Pour voir les informations de la liste de manifestes, vous pouvez utiliser la commande docker manifest inspect.

docker manifest inspect my-alpine:latest

Vous devriez voir un affichage similaire à celui-ci, montrant les détails de la liste de manifestes, y compris les manifestes pour les architectures amd64 et 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"
      }
    }
  ]
}

Cela confirme que la liste de manifestes my-alpine:latest a été créée avec succès et inclut les images spécifiées.

Envoyer la liste de manifestes à un registre

Dans cette étape, nous allons envoyer la liste de manifestes que nous avons créée à l'étape précédente à un registre Docker. Par défaut, docker push envoie des images individuelles. Pour envoyer une liste de manifestes, vous devez utiliser la commande docker manifest push.

Avant d'envoyer la liste, nous avons besoin d'un registre où l'envoyer. Pour ce laboratoire, nous utiliserons Docker Hub. Si vous n'avez pas de compte Docker Hub, vous pouvez en créer un gratuitement. Vous devrez vous connecter à Docker Hub depuis votre terminal.

docker login

Vous serez invité à entrer votre nom d'utilisateur et votre mot de passe Docker Hub. Entrez vos identifiants pour vous connecter.

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

Maintenant que vous êtes connecté, vous pouvez envoyer la liste de manifestes. Le format pour envoyer à Docker Hub est your_docker_username/manifest_list_name:tag. Supposons que votre nom d'utilisateur Docker Hub soit your_docker_username. Remplacez your_docker_username par votre véritable nom d'utilisateur Docker Hub.

docker manifest push your_docker_username/my-alpine:latest

Vous devriez voir un affichage indiquant que la liste de manifestes et les images associées sont en cours d'envoi au registre.

Pushed manifest list your_docker_username/my-alpine:latest

Une fois l'envoi terminé, vous pouvez vérifier que la liste de manifestes existe dans votre dépôt Docker Hub en visitant le site web Docker Hub ou en téléchargeant l'image sur une autre architecture.

Envoyer la liste de manifestes à un registre non sécurisé

Dans cette étape, nous allons explorer comment envoyer une liste de manifestes à un registre non sécurisé. Un registre non sécurisé est un registre qui n'utilise pas de certificats TLS/SSL. Bien que cela ne soit pas recommandé pour les environnements de production, cela peut être utile pour les tests ou les réseaux internes.

Par défaut, Docker exige des connexions sécurisées aux registres. Pour envoyer des données à un registre non sécurisé, vous devez configurer le démon Docker pour autoriser les connexions non sécurisées à l'adresse spécifique de ce registre.

Pour ce laboratoire, nous allons simuler un registre non sécurisé en utilisant un registre local qui fonctionne sans TLS. Tout d'abord, lançons un conteneur de registre local. Nous allons mapper le port 5000 de l'hôte sur le port 5000 du conteneur.

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

Vous devriez voir un affichage similaire à celui-ci, indiquant que le conteneur est en cours d'exécution :

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

Maintenant, nous devons configurer le démon Docker pour faire confiance à ce registre non sécurisé à l'adresse localhost:5000. Cela nécessite de modifier le fichier de configuration du démon Docker. L'emplacement de ce fichier peut varier, mais sur la plupart des systèmes Linux, il s'agit de /etc/docker/daemon.json.

Nous allons utiliser sudo nano pour éditer ce fichier.

sudo nano /etc/docker/daemon.json

Si le fichier n'existe pas, vous pouvez le créer. Ajoutez ou modifiez la clé insecure-registries pour inclure localhost:5000. Le contenu du fichier devrait ressembler à ceci :

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

Enregistrez le fichier et quittez l'éditeur (Ctrl+X, Y, Entrée dans nano).

Après avoir modifié la configuration, vous devez redémarrer le démon Docker pour que les modifications prennent effet.

sudo systemctl restart docker

Maintenant, vous pouvez étiqueter la liste de manifestes avec l'adresse du registre non sécurisé et l'envoyer. Nous allons utiliser la liste de manifestes my-alpine:latest créée à la première étape.

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

Vous devriez voir un affichage indiquant que l'envoi a réussi, même si le registre n'est pas sécurisé.

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

Cela démontre comment envoyer une liste de manifestes à un registre non sécurisé après avoir configuré le démon Docker.

Envoyer et supprimer la liste de manifestes locale

Dans cette étape, nous allons apprendre à envoyer une liste de manifestes et à supprimer automatiquement la copie locale après un envoi réussi. Cela peut être utile pour nettoyer votre environnement local après avoir envoyé des images multi-architectures.

La commande docker manifest push dispose d'un indicateur --purge qui supprime la liste de manifestes locale après qu'elle a été envoyée avec succès au registre.

Tout d'abord, vérifions que nous avons localement la liste de manifestes my-alpine:latest. Nous l'avons créée à la première étape. Vous pouvez l'inspecter pour confirmer son existence.

docker manifest inspect my-alpine:latest

Vous devriez voir les détails de la liste de manifestes comme précédemment.

Maintenant, nous allons envoyer cette liste de manifestes à nouveau sur Docker Hub, mais cette fois, nous utiliserons l'indicateur --purge. N'oubliez pas de remplacer your_docker_username par votre véritable nom d'utilisateur Docker Hub.

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

Vous devriez voir un affichage indiquant que l'envoi est en cours, puis un message confirmant que la liste de manifestes a été supprimée.

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

Une fois la commande terminée, la liste de manifestes locale my-alpine:latest ne devrait plus exister. Vous pouvez vérifier cela en essayant de l'inspecter à nouveau.

docker manifest inspect my-alpine:latest

Cette fois, vous devriez voir un message d'erreur indiquant que la liste de manifestes n'a pas été trouvée.

no such manifest: my-alpine:latest

Cela confirme que l'indicateur --purge a réussi à supprimer la liste de manifestes locale après l'avoir envoyée au registre.

Enfin, nettoyons le conteneur de registre non sécurisé local que nous avons lancé à l'étape précédente.

docker stop registry
docker rm registry

Vous devriez voir un affichage confirmant que le conteneur a été arrêté et supprimé.

registry
registry

Résumé

Dans ce laboratoire, nous avons appris à utiliser la commande docker manifest pour gérer des images multi-architectures. Nous avons commencé par télécharger deux versions d'architecture différentes de l'image alpine. Ensuite, nous avons utilisé docker manifest create pour combiner ces images en une seule liste de manifestes, nous permettant de les référencer avec un seul nom. Nous avons vérifié la création de la liste de manifestes à l'aide de docker manifest inspect.

Par la suite, nous avons exploré comment envoyer cette liste de manifestes à un registre Docker en utilisant docker manifest push. Nous avons également abordé le cas spécifique de l'envoi à un registre non sécurisé en ajoutant l'indicateur --insecure. Enfin, nous avons appris à envoyer la liste de manifestes tout en supprimant simultanément la copie locale en utilisant l'indicateur --purge avec la commande docker manifest push.