Hace poco me encontré con un problema frustrante: mis contenedores Docker funcionaban perfectamente en mi máquina, pero al desplegarlos en mi VPS salia un error. Después de varias horas de investigar, descubrí que el problema era la arquitectura del procesador. Mi maquina local es un AMD y el del VPS un ARM.
Incompatibilidad de Arquitecturas
El error principal era que yo estaba creando las imágenes para la arquitectura linux/amd64 (x86_64)
en mi máquina de desarrollo, pero mi VPS utilizaba una arquitectura linux/arm64
.
Para verificar la arquitectura de tu servidor, puedes usar el siguiente comando:
uname -m
El resultado aarch64
confirma que el servidor utiliza arquitectura ARM64, mientras que mis imágenes estaban compiladas para AMD64. Es como tratar de ejecutar un programa de Windows en un Mac.
Docker Buildx y Imágenes Multi-Arquitectura
Afortunadamente, Docker ofrece una solución para este problema a través de Docker Buildx, que permite crear imágenes que funcionen en múltiples arquitecturas simultáneamente.
1. Configurar Buildx
docker buildx create --name mybuilder --use
2. Inicializar el Builder
docker buildx inspect --bootstrap
Esto cambia tu driver de docker a docker-container, que sí soporta multi-arch.
3. Construir la Imagen Multi-Arquitectura
docker buildx build --platform linux/amd64,linux/arm64 -t ghcr.io/byandrev/rpcide-api:latest . --push
El parametro --platform linux/amd64,linux/arm64
le dice a Docker que construya la imagen para ambas arquitecturas. El parámetro --push
sube automáticamente la imagen al registry especificado el cual estoy usando el de Github.
Que sigue
Lo que sigue es automatizar este proceso, construir manualmente las imágenes multi-arquitectura cada vez que haces un cambio no es escalable la verdad. GitHub Actions ofrece una solución perfecta para esto, permitiendo que cada push o pull request genere automáticamente las imágenes para todas las arquitecturas soportadas.