En este tutorial vamos a configurar un equipo para poder crear imágenes ARM64 y AMD64 en ubuntu 24.04.
Este procedimiento lo vamos a hacer paso a paso mostrando capturas de pantalla y haciendo verificaciones.
Vamos a partir que ya tenemos docker instalado y funcionado como explico en este tutorial.
Un poco de contexto:
¿Qué es Docker?
Docker es una plataforma que permite empaquetar aplicaciones y sus dependencias en «contenedores». Estos contenedores son entornos aislados que funcionan de manera consistente en cualquier sistema operativo compatible, eliminando problemas de compatibilidad. Docker simplifica el desarrollo, despliegue y ejecución de aplicaciones, facilitando la colaboración entre equipos y agilizando el proceso de entrega de software. Piensa en ello como un contenedor para tu aplicación, que incluye todo lo que necesita para funcionar.
(Ref: https://www.docker.com/)
¿Qué es AMD64?
La arquitectura AMD64 (también conocida como x86-64) es una extensión de la arquitectura x86 original, diseñada por AMD. Es el estándar para la mayoría de las computadoras de escritorio y portátiles modernas. Permite procesar instrucciones de 64 bits, lo que permite mayor capacidad de memoria y mejor rendimiento en comparación con la arquitectura x86 de 32 bits. Es compatible con software x86 existente, lo que garantiza una amplia compatibilidad.
(Más info: https://es.wikipedia.org/wiki/X86-64)
¿Qué es ARM?
La arquitectura ARM (Advanced RISC Machines) es un diseño de procesador común en dispositivos móviles, sistemas embebidos y ahora también en computadoras. A diferencia de la arquitectura x86 (usada en PCs), ARM es más eficiente en consumo de energía y suele ser más pequeño. Sus procesadores destacan por su capacidad para realizar muchas tareas sencillas de forma rápida, haciéndolos ideales para dispositivos de baja potencia y con limitaciones de espacio.
(Más info: https://es.wikipedia.org/wiki/AArch64)
¿Porqué se estan usando la arquitectura ARM en datacenters?
ARM está ganando terreno en datacenters por varias razones clave, todas relacionadas con la eficiencia y los costos:
- Eficiencia Energética: Los procesadores ARM son inherentemente más eficientes energéticamente que las alternativas x86. Esto se traduce en menores costos de electricidad y refrigeración en los datacenters, que son enormes.
- Densidad: Debido a su eficiencia energética, más servidores ARM pueden caber en el mismo espacio físico, aumentando la densidad del datacenter.
- Costo: Los chips ARM suelen ser más baratos de fabricar que los chips x86, reduciendo el costo inicial del hardware.
- Optimización para Cargas de Trabajo Modernas: Muchas cargas de trabajo modernas (como inteligencia artificial, aprendizaje automático y procesamiento de bases de datos) se benefician de la arquitectura ARM, que puede ofrecer un mejor rendimiento por vatio.
- Innovación de Proveedores: Proveedores como AWS (con Graviton) y Ampere Computing están diseñando chips ARM específicamente optimizados para el entorno de datacenter, impulsando aún más su adopción.
Si bien la adopción de ARM en datacenters es relativamente nueva, su potencial para reducir costos y mejorar la eficiencia está impulsando una adopción creciente.
Procedimiento:
El primer paso como siempre es actualizar el equipo:
sudo apt update
sudo apt upgrade
Finalizada la instalación vamos a proceder a instalar buildx y los componentes para emular ARM en AMD64. (En mi caso estoy corriendo en un equipo con un procesador AMD Ryzen AI 9 HX 370, pero en un Intel el procedimiento es el mismo).
sudo apt install docker-buildx qemu-system-arm qemu-user-static binfmt-support

Vamos a verificar que el bootstrap de docker vea las nuevas arquitecturas disponibles.
sudo docker buildx inspect --bootstrap

Ahora el siguiente paso es configurar buildx para que utilize un driver multi-plataforma.
sudo docker buildx create --name multibuilder
sudo docker buildx use multibuilder
sudo docker buildx ls

Creamos una imagenes ARM y AMD64 en Ubuntu 24.04 (Verficación):
Para hacer la prueba voy a utilizar un dockerfile, super vásico.
Pueden descargarlo de este link de github.
Voy a armar una imagen que sobre un Ubuntu 24.04 instale un apache e incluya un html con un hola mundo.
El directorio donde tengo el dockerfile y un par de archivos accesorios los tengo un el path «/mnt/storage/dockerfiles/ubuntu-24.04-apache-basic/»
Los comandos que ejecuto son :
sudo /usr/bin/docker buildx build --platform linux/AMD64 /mnt/storage/dockerfiles/ubuntu-24.04-apache-basic/ -t ubuntu-24.04-apache-basic:latest --output type=docker,dest=/mnt/storage/dockerimages/ubuntu-24.04-apache-basic/$(date +"%Y%m%d-%H%M").AMD64.tar
sudo /usr/bin/docker buildx build --platform linux/ARM64 /mnt/storage/dockerfiles/ubuntu-24.04-apache-basic/ -t ubuntu-24.04-apache-basic:latest --output type=docker,dest=/mnt/storage/dockerimages/ubuntu-24.04-apache-basic/$(date +"%Y%m%d-%H%M").ARM64.tar
En este caso tengo que hacerlo en 2 instrucciones porque guardar dos arquitecturas en la imagen de un contenedor no está siendo soportado.

El parámetro «–platform» es las plataformas con las que se va a trabajar, el «-t» es el tag (es libre, pero por lo general hacer referencia al contenido de la imagen y la versión, para la versión yo uso YYYYmmdd-HHMM).
Prueba en AMD64:
El primer paso es verificar la arquitectura de mi equipo con el comando:
hostnamectl
En este caso se muestra x86-64 que es equivalente a AMD64

En mi equipo de escritorio ejecuto el comando
sudo docker load -i /mnt/storage/dockerimages/ubuntu-24.04-apache-basic/20251013-0244.AMD64.tar

Con el comando «docker images» verifico que la imagen ya esta disponible en el sistema.

Y para finalizar ejecuto el contenedor:
sudo docker run -d -p 8080:80 --name ubuntu-24.04-apache-basic ubuntu-24.04-apache-basic

Y si en mi navegador voy a la url http://127.0.0.1:8080
Veo la página «Hola Mundo».

Prueba en ARM64:
Ahora en una raspberry pi 4 que tengo con la ip 10.0.0.190, voy a proceder a instalar la imagen y ejecutar el contendor.
El primer paso es verificar la arquitectura, esto se puede hacer fácil viendo que kernel estamos ejecutado, con el comando:
hostnamectl

sudo docker load -i /mnt/storage/dockerimages/ubuntu-24.04-apache-basic/20251013-0244.ARM64.tar

Con el comando «docker images» verifico que la imagen ya esta disponible en el sistema.

Y para finalizar ejecuto el contenedor:
sudo docker run -d -p 8080:80 --name ubuntu-24.04-apache-basic ubuntu-24.04-apache-basic

Y verifico en la ip de la raspberry si está funcionado el apache en el puerto 8080.

Conclusión:
Podemos dar por satisfactorias las pruebas. Hemos podido crear imagnes ARM64 y AMD64 en Ubuntu 24.04 y ejecutarlas con éxito en ambas arquitecturas.
Limpieza de entornos.
Para finalizar las pruebas vamos a limpiar los entornos.
En ambos equipos debemos
- Parar el contendor.
- Borrar el contenedor
- Borrar la imagen.
Y eso lo hacemos con los siguientes comandos:
sudo docker container stop ubuntu-24.04-apache-basic
sudo docker container rm ubuntu-24.04-apache-basic
sudo docker image rm ubuntu-24.04-apache-basic

Deja un comentario