En el desarrollo de aplicaciones moderno y la gestión de infraestructura en la nube, optimizar el tamaño de los contenedores es una tarea crucial para cualquier equipo de tecnología.
Cuando trabajamos con contenedores, es muy común que el archivo final termine ocupando cientos de megabytes o incluso gigabytes debido a las herramientas de compilación necesarias durante el proceso.
Para solucionar este problema de peso y seguridad, la técnica conocida como Docker multi-stage build se ha convertido en el estándar indiscutible de la industria.
Qué es Docker multi-stage build
Docker multi-stage build es una funcionalidad integrada en el motor de Docker que permite utilizar múltiples sentencias FROM dentro de un único archivo Dockerfile.
Cada instrucción FROM puede utilizar una imagen base diferente y comenzar una etapa (stage) de construcción totalmente independiente de las anteriores.
La clave de este patrón consiste en que puedes copiar artefactos, ejecutable o archivos compilados directamente desde una etapa previa hacia la nueva etapa de producción.
🔴 ¿Quieres entrar de lleno al mundo DevOps & Cloud Computing? 🔴
Descubre el DevOps & Cloud Computing Full Stack Bootcamp de KeepCoding. La formación más completa del mercado y con empleabilidad garantizada
👉 Prueba gratis el Bootcamp en DevOps & Cloud Computing por una semanaEsto permite separar por completo el entorno de compilación (que incluye SDKs, compiladores y dependencias pesadas) del entorno de ejecución final.
Al aplicar este enfoque, la imagen resultante solo contiene los archivos estrictamente necesarios para ejecutar la aplicación, logrando un peso mínimo y reduciendo la superficie de ataque.
Por qué deberías utilizar construcciones multietapa
Antes de la llegada de esta característica, mantener imágenes livianas requería trucos complejos como escribir scripts Bash encadenados o mantener múltiples archivos Dockerfile paralelos.
Comprender el impacto de esta optimización es tan relevante para el ciclo de vida del software como dominar la diferencia entre frontend, backend y full stack en las fases iniciales de desarrollo.
Entre los principales beneficios que aporta la adopción de Docker multi-stage build destacan los siguientes puntos estratégicos:
- Imágenes extremadamente ligeras: Se eliminan códigos fuente, herramientas de construcción y archivos temporales de la imagen final.
- Mayor seguridad: Al eliminar herramientas de desarrollo del contenedor en producción, disminuyen drásticamente las vulnerabilidades potenciales.
- Despliegues más rápidos: Al transferir menos megabytes por red, los procesos de integración continua y despliegue en producción son mucho más ágiles.
- Mantenimiento simplificado: Toda la lógica de construcción se mantiene unificada en un único archivo de configuración.
Ejemplo práctico de un Dockerfile tradicional vs Multi-stage
Para visualizar la diferencia técnica, analicemos el caso de una aplicación compilada en Go o Node.js.
En un enfoque tradicional sin etapas múltiples, el Dockerfile incluiría el SDK completo en la imagen final, incrementando el peso sin necesidad.
Veamos cómo se estructura un patrón Docker multi-stage build profesional en un único archivo de configuración:
# Etapa 1: Compilación (Build stage)
FROM golang:1.21-alpine AS builder
WORKDIR /app
COPY . .
RUN go build -o mi-aplicacion .
# Etapa 2: Imagen final para producción
FROM alpine:latest
WORKDIR /root/
# Copiamos solo el binario compilado desde la etapa "builder"
COPY --from=builder /app/mi-aplicacion .
CMD ["./mi-aplicacion"]
En este ejemplo, la primera etapa utiliza la imagen pesada de Go para generar el ejecutable binario.
La segunda etapa parte de una imagen Alpine sumamente ligera y copia exclusivamente el binario generado previamente.
El resultado es una imagen final que pasa de ocupar cientos de megabytes a solo unos pocos megabytes sin perder funcionalidad.
Gestionar este tipo de flujos de trabajo automatizados resulta esencial para quienes trabajan con repositorios complejos y aplican metodologías donde entender qué es Git y por qué es tan importante marca la diferencia operativa.
Cómo nombrar y hacer referencia a las etapas de construcción

Por defecto, las etapas no tienen nombre y se hace referencia a ellas mediante un número entero que comienza en cero para la primera instrucción FROM.
Sin embargo, para garantizar un código limpio y legible, la mejor práctica consiste en asignar nombres descriptivos a cada etapa mediante la sintaxis AS nombre_etapa.
Posteriormente, al utilizar el comando COPY, se especifica la bandera --from=nombre_etapa para extraer los archivos deseados de manera explícita.
Incluso es posible utilizar una imagen externa previamente construida como etapa de origen utilizando la misma sintaxis de copia.
Esta versatilidad permite integrar tareas complejas sin acoplar dependencias innecesarias en los entornos de ejecución final.
Así como en las arquitecturas backend se busca máxima fiabilidad comprobando qué es ACID en bases de datos, en infraestructura se exige máxima eficiencia en cada contenedor.
Casos de uso habituales en entornos de integración continua
La técnica de Docker multi-stage build es ampliamente utilizada en la automatización de pipelines modernos dentro del área de operaciones y la nube.
Su aplicación se extiende a múltiples escenarios tecnológicos que benefician la entrega continua de software:
- Aplicaciones frontend con React o Angular: Se compilan los recursos estáticos en Node.js y se sirven mediante un servidor Nginx en la etapa final.
- Servicios backend compilados (Java, C#, Go, Rust): Se compila el paquete binario y se ejecuta sobre imágenes mínimas o sin sistema operativo (Scratch).
- Ejecución de pruebas unitarias: Se crea una etapa dedicada exclusivamente a ejecutar la suite de tests antes de generar la imagen final.
Estas prácticas forman parte indispensable del ecosistema técnico actual, donde comprender la evolución de la infraestructura conecta directamente con saber qué es MLOps y por qué es clave en ingeniería de software.
Para profesionales senior o con experiencia previa en administración de sistemas que buscan especializarse en orquestación avanzada y automatización inteligente, consultar la guía sobre el Programa Técnico Avanzado en DevOps con IA y LLMops representa un paso natural de crecimiento profesional.
Asimismo, para consultar los estándares oficiales de maquetación y recomendaciones del motor de contenedores, se puede revisar la guía de documentación oficial de Docker sobre multi-stage builds.
Conclusión
Implementar Docker multi-stage build es una decisión técnica clave para optimizar la entrega de software en entornos modernos.
Permite mantener archivos de configuración unificados, garantiza la creación de imágenes livianas y refuerza la seguridad en producción.
Adoptar este estándar dentro de tu equipo de desarrollo asegura un flujo de trabajo ágil, eficiente y alineado con las mejores prácticas del sector.

Si quieres dominar el despliegue de contenedores, la orquestación en Kubernetes y la automatización de la infraestructura en la nube con un enfoque 100% práctico, explora el Bootcamp Full Stack DevOps de KeepCoding y transforma tu perfil profesional.



