![](https://i0.wp.com/www.sismonda.com.ar/wp-content/uploads/2022/05/image63.png?resize=248%2C216)
Me puse como objetivo extender una imagen de MariaDB e incluirle un script que me haga backup todos los días. Así ya despliego el motor con un tema resuelto. La voy a utilizar en una raspberry pero quiero tener la posibilidad de correrla en mi pc (un amd64). ¿Cómo hago docker build para generar imágenes x64 y arm64?
Esto me hizo cruzar un laberinto de documentos y foros que me llevo un par de horas desandar, en base a la información que encontré pude armar un procedimiento relativamente simple.
Después de leer y revisar varios documentos llegue a comprender que es factible compilar binarios de otras plataformas utilizando QEMU como emulador.
Ref: https://collabnix.com/building-arm-based-docker-images-on-docker-desktop-made-possible-using-buildx/
Ref: https://www.stereolabs.com/docs/docker/building-arm-container-on-x86/
Asumo que ya tenemos docker andando en el equipo siguiendo el procedimiento «Instalar docker en Ubuntu para entornos de desarrollo.«.
Ya tenía un dockerfile creado (voy a hacer un post con eso también) desde el cual quería crear la imagen de un contenedor.
Sin más preámbulos vamos a poner dedos en teclado:
Procedimiento:
El primer paso es instalar los paquetes para desplegar QEMU en nuestro equipo.
sudo apt install qemu qemu-system-arm qemu-user-static binfmt-support docker-buildx
Para verificar que todo haya quedado bien podemos ejecutar el siguiente comando y debemos encontrar un archivo que muestre una información similar a esta captura
cat /proc/sys/fs/binfmt_misc/qemu-ppc
![Salida del comando "cat /proc/sys/fs/binfmt_misc/qemu-ppc".](https://i0.wp.com/www.sismonda.com.ar/wp-content/uploads/2022/05/image-9.png?resize=580%2C134)
El siguiente paso es verificar que bootstrap de docker vea las nuevas arquitecturas disponibles.
sudo docker buildx inspect --bootstrap
Con los prerequisitos satisfechos ahora vamos a proceder a trabajar sobre el driver que va a compilar nuestros contenedores
Para compilar el múltiples plataformas debemos usar la opción buildx de docker (forma parte de los plugins que instalamos).
sudo docker buildx ls
![Salida de la ejecución del comando "sudo docker buildx ls".](https://i0.wp.com/www.sismonda.com.ar/wp-content/uploads/2022/05/2022-05-06_19-56-1024x84.png?resize=580%2C48)
Vemos en la captura que ya lista otras plataformas para compilar.
Vamos a probar compilar algo para arm64
sudo docker buildx build --platform linux/arm64 /mnt/storage/dockerfiles/mariadb-10.6-focal-auto-backups/ -t fsismo/mariadb-10.6-focal-auto-backups:latest -t fsismo/mariadb-10.6-focal-auto-backups:v0.2
Podemos por ejemplo compilar una imagen para arm sobre mi terminal
![Salida del comando "sudo docker buildx build --platform .... "](https://i0.wp.com/www.sismonda.com.ar/wp-content/uploads/2022/05/image-13-1024x664.png?resize=580%2C376)
Excelente, funciona pero si quiero compilar dos plataformas al mismo tiempo me da error.
sudo docker buildx build --platform linux/amd64,linux/arm64 /mnt/storage/dockerfiles/mariadb-10.6-focal-auto-backups/ -t fsismo/mariadb-10.6-focal-auto-backups:latest -t fsismo/mariadb-10.6-focal-auto-backups:v0.2
![](https://i0.wp.com/www.sismonda.com.ar/wp-content/uploads/2022/05/image-14-1024x80.png?resize=580%2C45)
El error me dice que tengo que utilizar un «driver» diferente y que al mismo lo tengo que crear.
Esto lo hago ejecutando los siguientes pasos:
sudo docker buildx create --name multibuilder sudo docker buildx use multibuilder sudo docker buildx ls
![](https://i0.wp.com/www.sismonda.com.ar/wp-content/uploads/2022/05/image-15.png?resize=580%2C194)
Ahora procedemos a probar que podamos compilar las dos arquitecturas al mismo tiempo. En la captura incorporé el parámetro –push para que suba las imágenes resultantes a dockerhub.
sudo docker buildx build --platform linux/amd64,linux/arm64 /mnt/storage/dockerfiles/mariadb-10.6-focal-auto-backups/ -t fsismo/mariadb-10.6-focal-auto-backups:latest -t fsismo/mariadb-10.6-focal-auto-backups:v0.2
![](https://i0.wp.com/www.sismonda.com.ar/wp-content/uploads/2022/05/image-16-1024x215.png?resize=580%2C122)
Cómo quería subir la imagen a mi cuenta de DockerHub, ejecuté el build con el parámetro «–push».
![](https://i0.wp.com/www.sismonda.com.ar/wp-content/uploads/2022/05/2022-05-06_23-28-1024x630.png?resize=580%2C357)