Lorsque je veux créer des builds multiarch avec docker, j'utilise la commande:

docker buildx build --push --platform <list of archs> -t <tag1> -t <tag2> .

Cela fonctionne parfaitement bien, mais semble construire les images simultanément. Dans la plupart des situations, cela peut être acceptable, mais dans certains autres cas, cela semble trop lourd, nécessite trop de RAM et provoque des pannes de réseau (trop de connexions parallèles).

Existe-t-il un moyen de construire les images séquentiellement?

La seule solution que j'ai trouvée est de construire séparément pour chaque arc, puis d'utiliser "docker manifest create" pour assembler:

docker buildx build --push --platform <arch1> -t <tag-arch1> .
docker buildx build --push --platform <arch2> -t <tag-arch2> .
[...]
docker manifest create ... --amend ...
docker manifest push

Cela peut être bien, mais il semble que chaque image est censée être poussée vers le registre pour que "docker manifest create" puisse être assemblée. Ce n'est pas très bon, car cela pollue la liste des images de balises que je ne veux pas.

Serait-il possible d'utiliser "docker manifest create" sur des images locales, sans qu'il soit nécessaire de télécharger chacune d'elles séparément avec une balise dans le registre? Existe-t-il un meilleur moyen de créer simplement les images de manière séquentielle? Merci!

0
Luca Carlon 21 févr. 2021 à 17:59

1 réponse

Meilleure réponse

À l'heure actuelle, il n'y a aucun moyen de limiter la concurrence d'une seule version. Il s'agit actuellement d'un problème ouvert avec buildkit. Il existe également un problème similaire à autoriser la définition de limites de groupe de contrôle qui vous permettrait d'exécuter les compilations simultanément, mais avec moins de temps processeur maximal, ce qui aurait un effet similaire dans certains cas d'utilisation.

0
BMitch 21 févr. 2021 à 16:24