Las imágenes distroless en Docker te permiten crear contenedores hasta 16 veces más pequeños sin perder funcionalidad, eliminando capas innecesarias de la distribución base. Si trabajas con Docker y buscas optimizar tus despliegues, este enfoque cambia por completo la forma en que construyes imágenes.
El concepto se popularizó junto a otras tendencias de la industria que comparten su prefijo less, como serverless o wireless. Y aunque suena a que algo desaparece, la realidad es más interesante: el componente sigue ahí, solo que mucho más reducido.
Qué significa realmente distroless en Docker
La palabra distroless se asemeja a wireless o serverless: sugiere ausencia, pero no la implica del todo. En una conexión wireless no usas cables hasta el router, aunque del router en adelante sí los hay. En serverless no administras un servidor, pero tu aplicación sigue hospedada en uno.
Con distroless pasa lo mismo. No significa que tu imagen de Docker no tenga distribución de Linux, significa que esa distribución es mínima, compacta y ajustada solo a lo que tu servicio necesita [01:00].
¿Qué es una imagen distroless? Es una imagen base de Docker que contiene únicamente lo indispensable para ejecutar tu aplicación, eliminando shells, gestores de paquetes y utilidades que no aportan valor a tu servicio.
Ese enfoque reduce superficie de ataque, acelera despliegues y hace que tus contenedores sean mucho más livianos.
Dónde encuentro las imágenes distroless oficiales
El repositorio de referencia es Google Container Tools, donde el equipo mantiene una colección de imágenes distroless listas para usar. Ahí encontrarás documentación, variantes y ejemplos por lenguaje [01:45].
Las imágenes siguen una convención de nombres clara. Después de la palabra distroless aparece la base sobre la que se construyen, normalmente Debian o NoSSL Debian. También verás distintas arquitecturas disponibles para que elijas la que coincida con tu entorno de despliegue.
Dentro del repositorio existe un folder de ejemplos con casos prácticos por tecnología. Para esta demostración se usa el ejemplo de Python 3, que contiene solo dos archivos: un Dockerfile y un hello.py.
Cómo construyo una imagen distroless paso a paso
El flujo es directo. Copias el archivo hello.py del repositorio sin modificar nada porque ya viene optimizado, y lo pegas en un nuevo folder llamado distroless dentro de Visual Studio Code.
Luego replicas el Dockerfile del mismo ejemplo. Aquí es donde aparece la pieza clave: el archivo usa la técnica de multi-stage build, con dos imágenes involucradas.
- Python 3 slim: imagen donde se ejecuta toda la lógica de compilación y preparación de la aplicación.
- Distroless Python 3: imagen final que publica la aplicación lista para producción, sin las herramientas de desarrollo.
Esta separación es lo que permite que tu imagen final sea minúscula, porque solo arrastra lo necesario para correr el código, no para construirlo.
Qué comando uso para compilar la imagen
Desde la terminal, ubicado en el folder donde está el Dockerfile, ejecutas:
bash
docker build -t hello-python .
El tag hello-python te sirve para identificar la imagen, y el punto final indica que el contexto de construcción es el directorio actual. La compilación es notablemente rápida [04:00].
Cuánto se reduce el tamaño con una imagen distroless
Aquí viene lo interesante. Al revisar el resultado en Docker Desktop, la diferencia es brutal. Una aplicación que en imágenes tradicionales pesaba 840 MB, con distroless baja a 52 MB [04:30].
Eso es una reducción de aproximadamente 94% en el tamaño final, manteniendo la misma funcionalidad.
¿Por qué una imagen distroless es tan pequeña? Porque elimina shell, gestores de paquetes y utilidades del sistema operativo que tu aplicación no necesita en producción, dejando solo el runtime y las dependencias mínimas.
Ese ahorro impacta directamente en tiempos de pull, costos de almacenamiento en registries y velocidad de arranque en orquestadores como Kubernetes.
Cuándo conviene usar distroless en mis proyectos
La decisión depende del balance entre depuración y optimización. Como las imágenes distroless no incluyen shell, no puedes hacer docker exec para entrar al contenedor a investigar problemas en caliente. Eso es intencional: menos componentes, menos vectores de ataque.
Es ideal cuando ya tienes una aplicación estable, has terminado la fase de desarrollo y quieres llevarla a producción con la mínima superficie posible. Para entornos de desarrollo activo, una imagen slim sigue siendo más cómoda.
La lección central es que distroless no se trata de eliminar la distribución de Linux, sino de elegir la más reducida y optimizada posible para que tu imagen sea angosta sin sacrificar capacidad de despliegue.
¿Has medido el tamaño de tus imágenes actuales? Cuéntame en los comentarios cuánto pesan tus contenedores hoy y dónde crees que podrías aplicar distroless en tu stack.