Saltar al contenido principal

Docker Buildx y Multiarquitectura

Cada vez es más común tener que crear imágenes de contenedores para distintas arquitecturas. Por ejemplo, si tienes un servidor con una arquitectura ARM, raspberry PI, un Mac con los procesadores M o los PC windows con qualcomm, necesitarás crear imágenes para cada una de estas arquitecturas.

La verdad que Docker nos lo pone fácil con la herramienta Buildx, que nos permite crear imágenes multiarquitectura de forma sencilla.

En este capítulo veremos com ejecutar imágenes de otras arquitecturas con docker y como construir imágenes multiarquitectura con Docker Buildx.

Dentro vídeo: https://youtu.be/umfTMXWgLlo

Curso de Docker

Que arquitecturas soporta Docker

Docker soporta principalmente las siguientes arquitecturas:

  • amd64: Arquitectura de 64 bits, la más común en los PC de sobremesa y servidores.
  • arm64: Arquitectura de 64 bits, común en dispositivos embebidos y raspberry PI a partir de la versión 3 si utilizas el sistema operativo de 64 bits.

Además, Docker soporta otras arquitecturas menos comunes como armhf, ppc64le, s390x y mips64le, que no veremos en este curso.

Ejecutar imágenes de otras arquitecturas

Docker nos permite ejecutar imágenes de otras arquitecturas en nuestro sistema. Personalmente me pasa en dos casos, o bien que este en un PC y quiera probar las imágenes que voy a ejecutar en una reaspberry o en un servidor graviton de AWS o bien porque este en el Mac y quiera probar un servicio que no tiene imagen de ARM.

Para ejecutar una imagen de otra arquitectura, simplemente tenemos que especificar la arquitectura en el comando docker run. Por ejemplo, para ejecutar una imagen de AMD64 en un PC con arquitectura ARM64, ejecutaríamos:

docker run --platform amd64 nginx

Esto buscará el manifiesto de la imagen nginx para la arquitectura amd64 y usará QEMU para emular la arquitectura en la que estamos ejecutando el contenedor y hacer que funcione.

Si fuera al reves, es decir, ejecutar una imagen de ARM64 en un PC con arquitectura AMD64, ejecutaríamos:

docker run --platform arm64 nginx

Crear imágenes multiarquitectura con Docker Buildx

Docker Buildx es una herramienta que nos permite crear imágenes multiarquitectura de forma sencilla. Para ello, necesitamos tener instalado Docker Desktop o Docker Engine en nuestro sistema.

Para crear una imagen multiarquitectura, primero tenemos que crear un builder con docker buildx create. Por ejemplo, para crear un builder llamado mybuilder, ejecutaríamos:

docker buildx create --name mybuilder

Una vez creado el builder, podemos ver los builders que tenemos con docker buildx ls y seleccionar el builder con docker buildx use mybuilder.

Para construir una imagen multiarquitectura, simplemente tenemos que ejecutar docker buildx build con la opción --platform y especificar las arquitecturas que queremos construir. Por ejemplo, para construir una imagen de nginx para las arquitecturas amd64 y arm64, ejecutaríamos:

docker buildx build --platform linux/amd64,linux/arm64 -t pabpereza/nginx .

Con esto, Docker Buildx construirá la imagen nginx para las arquitecturas amd64 y arm64 y la subirá al registro de imágenes por defecto.

Resumen

En este capítulo hemos visto como ejecutar imágenes de otras arquitecturas con Docker y como construir imágenes multiarquitectura con Docker Buildx. Esto nos permitirá crear imágenes para distintas arquitecturas de forma sencilla y sin tener que preocuparnos de la arquitectura de nuestro sistema.

En el siguiente capítulo veremos como optimizar el cache de las imágenes de Docker para mejorar los tiempos de construcción de las imágenes.


Volver al índice

X

Graph View