Agence web » Actualités du digital » Qu’est-ce qu’un manifeste d’image 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 l’appareil 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 de 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 en utilisant le docker manifest inspect commander. 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 par défaut les détails du manifeste à partir de registres non sécurisés. Si vous devez utiliser un registre mal sécurisé, ajoutez le --insecure drapeau à votre docker manifest commandes.

Manifestes et constructions multi-arches

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é limitatif car Docker a trouvé plus d’utilisation dans les environnements de serveurs 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 officielle PHP Docker. 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 ou du système d’exploitation cible.

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

Vous pouvez créer manuellement des images multi-architectures à l’aide de la docker manifest commander. Construisez chacune des images individuelles et placez-les dans un registre. Utilisez ensuite 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

Utilisant manifest create avec le --amend flag vous permet de fusionner plusieurs manifestes indépendants. Le manifeste final est ensuite envoyé 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 à plusieurs arches, il est donc utile de comprendre le fonctionnement interne de la façon dont les images sont liées entre elles.

Annotation des manifestes

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

Utilisez le docker manifest annotate commande pour configurer les annotations. Si vous annotez une image à architecture unique, fournissez une balise d’image qui la 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 du 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 multi-architecture. Dans ce dernier cas, le fichier contient une liste de références aux manifestes à arche unique qu’il incorpore.

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.

★★★★★