GNU/Linux >> Tutoriels Linux >  >> Panels >> Docker

Qu'est-ce qu'un manifeste d'image Docker ?

Les manifestes Docker décrivent les couches à l'intérieur d'une image. Un manifeste permet une comparaison exacte de deux images, même si des balises différentes leur sont attribuées.

Les manifestes sont exprimés en JSON et contiennent des informations sur les couches et les architectures de l'image. Le client Docker utilise des manifestes pour déterminer si une image est compatible avec le périphérique actuel. Il utilise ensuite les informations pour déterminer comment démarrer de nouveaux conteneurs.

Le format du manifeste

Le schéma du manifeste est actuellement à la version 2. Un fichier complet déclarera sa version de schéma, puis une liste des entrées du manifeste disponibles pour l'image. Chaque entrée représente une variante différente de l'image, telle que x86 et ARM64.

Vous pouvez afficher le manifeste de n'importe quelle image à l'aide de l'docker manifest inspect commande. Cela fonctionne à la fois avec les images locales et les images stockées sur un registre distant tel que Docker Hub.

docker manifest inspect my-image:latest

Le manifeste est une liste de couches incluses dans l'image. Vous pouvez voir le hachage du contenu du calque et sa taille globale.

Si vous ajoutez le --verbose flag, vous obtiendrez encore plus d'informations sur l'image. Cela inclut la balise de l'image (dans le Ref domaine), son architecture et son système d'exploitation.

Docker ne chargera pas les détails du manifeste des registres non sécurisés par défaut. Si vous devez utiliser un registre mal sécurisé, ajoutez le --insecure flag à votre docker manifest commandes.

Manifestes et builds multi-arch

Historiquement, Docker ne prenait pas en charge plusieurs architectures d'images. Les images ne pouvaient être utilisées que sur des machines ayant la même architecture que celle sur laquelle elles étaient construites. Cela s'est rapidement avéré limité car Docker a été davantage utilisé dans les environnements de serveur et sur les nouvelles machines basées sur ARM.

En plus de permettre une identification unique des images, les manifestes facilitent les constructions multi-architectures. Si vous inspectez une image qui prend en charge plusieurs architectures, vous verrez une sortie manifeste légèrement différente :

docker manifest inspect php:latest

L'exécution de la commande ci-dessus affichera le manifeste de l'image PHP Docker officielle. Vous pouvez voir sur la capture d'écran que plusieurs options de plate-forme sont disponibles, notamment AMD64 et ARM. Nous avons tronqué la liste complète qui comprend en fait huit architectures différentes prises en charge.

Les manifestes permettent aux auteurs d'images d'annoncer la prise en charge de plusieurs architectures sous une seule balise d'image. Le client Docker sélectionne la version d'image appropriée pour sa plate-forme, en fonction des options de la liste. On s'attend à ce que les auteurs ne regroupent que les images qui offrent des fonctionnalités identiques - il ne devrait y avoir aucun changement au-delà de l'architecture cible ou du système d'exploitation.

Chaque architecture de la liste fait référence à une autre manifest via son digest domaine. Le manifeste référencé sera un fichier standard à architecture unique. Docker fait correspondre la plate-forme actuelle au manifeste à une seule arche de droite, puis charge ce fichier pour déterminer la liste finale des calques d'image.

Vous pouvez créer manuellement des images multi-architectures à l'aide du docker manifest commande. Construisez chacune des images individuelles et placez-les dans un registre. Ensuite, utilisez le docker manifest create commande pour combiner les images dans un nouveau manifeste partagé sous une seule balise.

# 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

Utilisation de manifest create avec le --amend flag vous permet de fusionner plusieurs manifestes indépendants ensemble. Le manifeste final est ensuite poussé vers Docker Hub avec le latest étiqueter. Les utilisateurs d'AMD64 et d'ARM pourront tous deux créer des conteneurs à partir de cette image.

L'assemblage manuel d'images multi-arches n'est pas obligatoire. Vous pouvez utiliser le buildx commande à la place pour simplifier considérablement le processus.

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

Cette commande unique génère une image qui fonctionne à la fois sur les plates-formes AMD64 et ARM64. Sous le capot, il produit toujours une liste de manifestes multi-arch, il est donc utile de comprendre le fonctionnement interne de la façon dont les images sont liées entre elles.

Annoter les manifestes

Docker vous permet de remplacer manuellement les données du manifeste via des annotations. Les champs pris en charge incluent les informations sur l'architecture et le système d'exploitation.

Utiliser le docker manifest annotate commande pour configurer les annotations. Si vous annotez une image à architecture unique, fournissez une balise d'image qui y fait référence. Pour les images multi-arch, vous aurez besoin à la fois de la balise d'image globale et de la balise du manifeste individuel dans la liste des manifestes multi-arch.

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

Cette commande marque la version AMD64 de my-image:latest image en tant que conteneur basé sur Linux.

Les annotations n'ont pas souvent besoin d'être définies à la main. Ils sont généralement déduits automatiquement de l'environnement de construction. Vous pouvez utiliser le annotate commande pour ajouter des champs manquants ou modifier la configuration de l'image à l'avenir.

Résumé

Les manifestes Docker décrivent les couches d'une image et les architectures qu'elle prend en charge. Un manifeste peut être soit une architecture unique, prenant en charge une plate-forme spécifique, soit une architecture multiple. Dans ce dernier cas, le fichier contient une liste de références aux manifestes à architecture unique qu'il intègre.

L'interaction manuelle avec les manifestes devrait être rare mais est possible avec le docker manifest groupe de commandement. Il est désormais plus courant d'automatiser les builds multi-arch via Buildx, qui offre une expérience d'assemblage de manifeste simplifiée.


Docker
  1. Qu'est-ce que Docker (et les conteneurs Linux ?)

  2. Extraire le fichier de l'image Docker ?

  3. Quoi de neuf dans Docker Compose v2 ?

  4. Mettre à jour un conteneur déployé basé sur une image Docker

  5. Comment valider les modifications apportées à une image Docker

Qu'est-ce qu'un manifeste d'image Docker ?

Déployer une installation de production Docker MariaDB

Comment réduire la taille de l'image Docker dans les conteneurs Docker

Docker File vs Docker Compose :quelle est la différence ?

Partage d'images Docker sur Docker Hub

Que faire si un conteneur Docker se ferme immédiatement