Cómo elegir imágenes base pequeñas para Docker

como-elegir-imagenes-base-pequenas
como-elegir-imagenes-base-pequenas

En este post veremos cómo elegir imágenes base pequeñas para Docker. La imagen base influye en el tamaño, las dependencias y las herramientas que estarán disponibles al ejecutar el contenedor. Elegir una variante pequeña puede reducir descargas y almacenamiento, pero la opción más pequeña no siempre es compatible con tu aplicación.

Para elegir imágenes base pequeñas para Docker, parte de lo que necesita el proceso en producción: bibliotecas del sistema, certificados, arquitectura y soporte del lenguaje. Después mide la imagen resultante y prueba la aplicación dentro de ella.

👉 Y recuerda, si quieres aprender más de Linux, pincha en este curso de Linux gratis.

🐳 Si quieres aprender más de Docker, pincha en este curso de Docker gratis.

Qué comparar en una imagen base

Las etiquetas como slim o alpine describen variantes distintas, no una garantía de que todas las aplicaciones funcionen igual. Compara la base con el runtime y las bibliotecas que exige el programa.

Tipo de baseCuándo puede encajarQué debes comprobar
Variante estándarNecesitas una distribución completa o dependencias del sistema que no están en una variante reducida.Puede traer paquetes que la aplicación no necesita en ejecución.
Variante slimQuieres conservar compatibilidad con Debian o Ubuntu y reducir paquetes opcionales.Comprueba que están las bibliotecas del runtime y las herramientas que la app usa.
AlpineTu aplicación funciona correctamente sobre Alpine y buscas una base pequeña.Alpine usa musl; módulos nativos compilados para glibc pueden necesitar ajustes o recompilación.
DistrolessEl proceso requiere solo el runtime y sus dependencias, sin herramientas de administración dentro de la imagen.No incluye shell ni gestor de paquetes; prepara por separado la depuración y la observabilidad.
ScratchPublicas un binario estático que no necesita una distribución base.La imagen está vacía: tendrás que aportar certificados, datos de zona horaria u otros archivos requeridos.

Empieza por una variante oficial compatible

Busca imágenes base pequeñas para Docker y elige una etiqueta que identifique una versión y una distribución conocidas. Evita usar latest como base de despliegue: el contenido puede cambiar entre builds y hacer más difícil reproducir el resultado.

Una variante slim de Node puede servir para una aplicación que solo necesita el runtime y dependencias de producción. Este ejemplo presupone un proyecto con archivo de bloqueo y un servidor de Node que arranca desde server.js.

FROM node:22-bookworm-slim
WORKDIR /app
COPY package*.json ./
RUN npm ci --omit=dev
COPY . .
USER node
CMD ["node", "server.js"]

Si tu proyecto compila archivos antes de ejecutarse, instala herramientas de compilación solo en una etapa de build y copia el resultado necesario a una etapa runtime. Así la imagen final no hereda automáticamente el compilador ni las dependencias de desarrollo.

Mide y prueba el resultado final

Construye la misma aplicación con cada candidata y compara el artefacto final, no solo el tamaño de la etiqueta base. Revisa qué capas añaden contenido y ejecuta las pruebas de inicio y funcionamiento dentro de cada imagen.

docker build -t mi-api:bookworm-slim .
docker image inspect mi-api:bookworm-slim --format='{{.Size}}'
docker image history mi-api:bookworm-slim

docker image inspect muestra el tamaño en bytes y docker image history ayuda a localizar capas grandes. Repite la construcción con la otra variante, conserva el mismo código y las mismas dependencias, y compara resultados con una medida equivalente.

Antes de ejecutar

  • Comprueba las bibliotecas, certificados y archivos que necesita la aplicación en ejecución.
  • Verifica la arquitectura y el runtime de cada imagen candidata.
  • Prueba el mismo artefacto y las mismas tareas en cada variante antes de comparar tamaños.
  • Asegúrate de que puedes depurar y actualizar la imagen elegida, sobre todo si no incluye una shell.

Errores comunes

  • Elegir Alpine únicamente por su tamaño y descubrir después que una biblioteca nativa depende de glibc.
  • Usar scratch sin copiar los certificados u otros archivos que necesita una aplicación real.
  • Confundir una imagen pequeña con una imagen segura: mantén la base actualizada y analiza vulnerabilidades.
  • Comparar imágenes que contienen dependencias distintas o builds diferentes; mide la misma aplicación y prueba el mismo comportamiento.
  • Usar una etiqueta flotante sin revisar qué versión y distribución recibirá el siguiente build.

Lecciones relacionadas del curso Docker

Documentación oficial y recursos

Elige la imagen base más pequeña que siga siendo compatible, mantenible y comprobable para tu aplicación. Mide la imagen final, prueba el proceso con sus dependencias reales y documenta por qué escogiste esa variante antes de adoptarla en producción.

Comentarios

No hay comentarios aún. ¿Por qué no comienzas el debate?

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *