Cuando quiero crear compilaciones multiarca con Docker, uso el comando:

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

Esto funciona perfectamente bien, pero parece estar construyendo las imágenes al mismo tiempo. En la mayoría de las situaciones, puede ser aceptable, pero en algunos otros casos, parece ser demasiado pesado, requiere demasiada RAM y causa fallas en la red (demasiadas conexiones paralelas).

¿Hay alguna forma de construir las imágenes de forma secuencial?

La única solución que encontré es construir para cada arco por separado y luego usar "docker manifest create" para ensamblar:

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

Esto puede estar bien, pero parece que se supone que cada imagen debe enviarse al registro para que la "creación de manifiesto de la ventana acoplable" pueda ensamblarse. Esto no es muy bueno, ya que contamina la lista de imágenes de etiquetas que no quiero.

¿Sería posible utilizar "docker manifest create" en imágenes locales, sin la necesidad de cargar cada una de ellas por separado con una etiqueta en el registro? ¿Existe alguna forma mejor de simplemente construir las imágenes secuencialmente? ¡Gracias!

0
Luca Carlon 21 feb. 2021 a las 17:59

1 respuesta

La mejor respuesta

En la actualidad, no hay forma de limitar la simultaneidad de una sola compilación. Actualmente, este es un problema abierto con buildkit. También hay un problema similar para permitir establecer límites de cgroup que le permitirían ejecutar las compilaciones. al mismo tiempo, pero con menos tiempo máximo de CPU, lo que tendría un efecto similar para algunos casos de uso.

0
BMitch 21 feb. 2021 a las 16:24