doc-locale/fr-fr/ci/docker/buildah_rootless_multi_arch.md
{{< details >}}
{{< /details >}}
Utilisez Buildah pour créer des images pour plusieurs architectures de CPU. Les builds multi-plateformes créent des images qui fonctionnent sur différentes plateformes matérielles, et Docker sélectionne automatiquement l'image appropriée pour chaque cible de déploiement.
Pour créer des images multi-plateformes avec Buildah :
L'exécution des jobs sur leurs architectures respectives permet d'éviter les problèmes de performances liés à la traduction des instructions CPU. Cependant, vous pouvez exécuter les deux builds sur une seule architecture si nécessaire. La compilation pour une architecture non native peut entraîner des temps de build plus longs.
L'exemple suivant utilise deux runners GitLab hébergés sur Linux :
saas-linux-small-arm64saas-linux-small-amd64stages:
- build
variables:
STORAGE_DRIVER: vfs
BUILDAH_FORMAT: docker
FQ_IMAGE_NAME: "$CI_REGISTRY_IMAGE:latest"
default:
image: quay.io/buildah/stable
before_script:
- echo "$CI_REGISTRY_PASSWORD" | buildah login -u "$CI_REGISTRY_USER" --password-stdin $CI_REGISTRY
build-amd64:
stage: build
tags:
- saas-linux-small-amd64
script:
- buildah build --platform=linux/amd64 -t $CI_REGISTRY_IMAGE:amd64 .
- buildah push $CI_REGISTRY_IMAGE:amd64
build-arm64:
stage: build
tags:
- saas-linux-small-arm64
script:
- buildah build --platform=linux/arm64/v8 -t $CI_REGISTRY_IMAGE:arm64 .
- buildah push $CI_REGISTRY_IMAGE:arm64
create_manifest:
stage: build
needs: ["build-arm64", "build-amd64"]
tags:
- saas-linux-small-amd64
script:
- buildah manifest create $FQ_IMAGE_NAME
- buildah manifest add $FQ_IMAGE_NAME docker://$CI_REGISTRY_IMAGE:amd64
- buildah manifest add $FQ_IMAGE_NAME docker://$CI_REGISTRY_IMAGE:arm64
- buildah manifest push --all $FQ_IMAGE_NAME
Ce pipeline crée des images spécifiques à chaque architecture, taguées avec amd64 et arm64, puis les combine en un seul manifeste disponible sous le tag latest.
Si vous rencontrez des échecs d'authentification au registre :
CI_REGISTRY_USER et CI_REGISTRY_PASSWORD sont disponibles.Pour les problèmes de build multi-plateformes :
Dockerfile prennent en charge les architectures cibles.Dockerfile pour la logique spécifique à chaque architecture.Error during unshare(CLONE_NEWUSER): Operation not permitted {#error-error-during-unshareclone_newuser-operation-not-permitted}Lorsque vous utilisez Buildah ou Docker BuildKit en mode rootless pour créer des images Docker dans des jobs CI/CD, vous pourriez rencontrer une erreur Error during unshare(CLONE_NEWUSER): Operation not permitted.
Cette erreur se produit lorsque les options de sécurité requises ne sont pas définies pour les builds de conteneurs rootless.
Pour résoudre ce problème, configurez la section [runners.docker] dans le fichier config.toml du runner :
[runners.docker]
security_opt = ["seccomp:unconfined", "apparmor:unconfined"]
Pour plus d'informations, consultez Builds Docker rootless BuildKit et exigences de sécurité.