La maintenance d'images distinctes avec des tags différents pour les architectures x86 et Arm augmente la charge de travail. Utilisez docker buildx pour générer des images multi-architecture à partir d'un Dockerfile, ou utilisez docker manifest pour regrouper des images mono-architecture existantes sous un seul tag.
Prérequis
Avant de commencer, assurez-vous de disposer des éléments suivants :
Une instance Container Registry Enterprise Edition. Pour plus d'informations, consultez la rubrique Créer une instance Container Registry Enterprise Edition.
Un client Docker installé sur votre appareil local. Pour plus d'informations, consultez la rubrique Installer Docker.
-
Un accès à l'instance Container Registry Enterprise Edition depuis le client Docker. Exécutez la commande suivante en remplaçant l'espace réservé par l'adresse de votre registre :
docker login --username=<your-username> <registry-address>Exemple :
docker login --username=xxx acr-test-registry.cn-hangzhou.cr.aliyuncs.com
Générer une image multi-architecture à partir d'un Dockerfile
-
Créez un fichier Dockerfile dans le répertoire de votre projet. Cet exemple utilise un projet Java Maven :
# First stage: build environment FROM maven:3.5.0-jdk-8-alpine AS builder ADD ./pom.xml pom.xml ADD ./src src/ RUN mvn clean package # Second stage: minimal runtime environment FROM openjdk:8-jre-alpine COPY --from=builder target/my-app-1.0-SNAPSHOT.jar my-app-1.0-SNAPSHOT.jar EXPOSE 8080 CMD ["java", "-jar", "my-app-1.0-SNAPSHOT.jar"] -
Ouvrez un terminal dans le répertoire du projet et exécutez les commandes suivantes :
-
Désactivez l'option Attestations de provenance de docker buildx :
export BUILDX_NO_DEFAULT_ATTESTATIONS=1 -
Générez l'image multi-architecture et envoyez-la vers votre dépôt d'images :
docker buildx build . -t acr-test-registry.cn-hangzhou.cr.aliyuncs.com/test/test:multi --platform linux/amd64,linux/arm64 --pushCette commande génère des images pour les architectures amd64 et arm64, puis les envoie vers le dépôt sous un seul tag multi-architecture.
RemarqueAvant d'exécuter la commande docker push pour envoyer des images vers un dépôt d'images, vous devez exécuter la commande docker login pour vous connecter au dépôt. Exemple de commande docker login :
docker login --username=xxx acr-test-registry.cn-hangzhou.cr.aliyuncs.com. -
Créer une image multi-architecture à partir d'images mono-architecture existantes
Utilisez cette méthode si vous disposez déjà d'images mono-architecture séparées et souhaitez les regrouper sous un seul tag multi-architecture.
-
Exécutez la commande
docker tagpour retagger les images mono-architecture, puis envoyez-les vers l'instance Container Registry Enterprise Edition. Cet exemple utilise une image NGINX arm64 et une image NGINX amd64 :docker tag nginx:arm64 acr-test-registry.cn-hangzhou.cr.aliyuncs.com/multi-arch/nginx:arm64 docker push acr-test-registry.cn-hangzhou.cr.aliyuncs.com/multi-arch/nginx:arm64 docker tag nginx:amd64 acr-test-registry.cn-hangzhou.cr.aliyuncs.com/multi-arch/nginx:amd64 docker push acr-test-registry.cn-hangzhou.cr.aliyuncs.com/multi-arch/nginx:amd64 -
Exécutez la commande
docker manifest createpour créer une liste de manifests et fusionner les images de l'étape 1 en une image multi-architecture :docker manifest create acr-test-registry.cn-hangzhou.cr.aliyuncs.com/multi-arch/nginx:multi \ acr-test-registry.cn-hangzhou.cr.aliyuncs.com/multi-arch/nginx:arm64 \ acr-test-registry.cn-hangzhou.cr.aliyuncs.com/multi-arch/nginx:amd64 -
Exécutez la commande
docker manifest pushpour envoyer la liste de manifests vers l'instance Container Registry Enterprise Edition :docker manifest push acr-test-registry.cn-hangzhou.cr.aliyuncs.com/multi-arch/nginx:multi -
(Facultatif) Vérifiez que l'image multi-architecture a bien été envoyée :
docker manifest inspect acr-test-registry.cn-hangzhou.cr.aliyuncs.com/multi-arch/nginx:multiLa sortie liste les manifests pour chaque architecture incluse.
Références
Pour configurer et exécuter des générations d'images multi-architecture dans la console Container Registry, consultez la rubrique Générer des images de conteneurs pour plusieurs architectures.