Creando una imagen de contenedor con soporte multiarquitectura
Una imagen con soporte multiarquitectura le permite correr su software en diferentes plataformas de hardware

Por lo general, cuando se crea una imagen de contenedor, esta se construye con el objetivo de correrla en la misma plataforma de hardware en la cual es construído, sin embargo, es posible utilizar un emulador como QEMU para crear una imagen que pueda correr en otros dispositivos con una arquitectura distinta. Un ejemplo de esto sería correr un un mismo contenedor en un computador con soporte para instrucciones x86 (Intel/AMD) o en un Raspberry Pi (Arm).
Pre-requisitos
Para nuestro laboratorio, vamos a utilizar una computadora x86 corriendo Ubuntu. Adicionalmente, es necesario tener Docker instalado utilizando las instrucciones oficiales.
Adicionalmente, es necesario contar con una cuenta en Docker hub (gratis)
Procedimiento
Instalar QEMU en el sistema operativo
apt install -y qemu-user-staticCorrer Binfmt en un contenedor
docker run --privileged --rm tonistiigi/binfmt --install allConfigurar Buildkit
docker buildx create --use --name mymultiarchbuilder \ --driver docker-container docker buildx inspect --bootstrapIniciar sesión en Docker Hub
docker loginCrear el contenedor. Por favor note que es necesario reemplazar “<my username>” en el script con su username del Docker Hub
docker buildx build \ -t <my username>/mymultiarch:latest \ --platform linux/386,linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64/v8,linux/ppc64le,linux/riscv64,linux/s390x,linux/arm64 \ --push \ -f - . <<EOF FROM alpine:latest # Install bash inside the image for all target platforms RUN apk add bash # Define the command that will run when the container starts CMD ["sh", "-c", "echo 'Hola desde Arch: $(uname -m)' && /bin/bash"] EOFInspeccionando la imagen
docker buildx imagetools inspect <my username>/mymultiarch:latest

Pruebas
Corra el contenedor en diferentes hardware en diferentes plataformas
docker run --rm <my username>/mymultiarch:latest uname -m
Dependiendo de la plataforma desde la que ejecute el comando se mostrará la arquitectura en la que está corriendo el contenedor


Adicionalmente, puede abrir la imagen en Docker Hub y ver todas las plataformas que son soportadas por el contenedor

Conclusión
Es posible lograr que su software corra en varias plataformas logrando un rendimiento nativo gracias a la tecnología de cross compiling que permite lograr una verdadera multiarquitectura en donde su software no corre siendo emulado sino utilizando las instrucciones nativas que ofrece el procesador. De la misma manera, este tipo de contenedores pueden ser utilizados en clusters de Kubernetes que ofrecen capacidades de hospedaje híbrido, en donde usted podría por ejemplo correr su software en hardware x86 a la par de estaciones de trabajo Apple con procesadores de la serie M (arm64) de una forma completamente transparente.



