Compilaciones multietapa para mejorar la eficiencia
Utilice compilaciones multietapa para crear imágenes de producción más pequeñas y seguras separando las dependencias de compilación y ejecución.
Compilaciones multietapa para mejorar la eficiencia es una lección gratuita de Docker & DevOps Fundamentals en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Docker & DevOps Fundamentals, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Docker & DevOps Fundamentals incluye 4 lecciones en total.
Introducción a las compilaciones multietapa
¡Bienvenido a la optimización avanzada de Dockerfile! Hoy exploraremos las compilaciones multietapa, una técnica potente para crear imágenes de Docker más pequeñas y eficientes.
Las imágenes más pequeñas se descargan más rápido, ofrecen mayor seguridad y aprovechan mejor los recursos.

Por qué son importantes las imágenes pequeñas
Al compilar una imagen de Docker, a menudo se incluyen herramientas y dependencias que solo se necesitan durante el proceso de compilación, no durante la ejecución final de la aplicación.
- Descargas más rápidas: Las imágenes pequeñas se descargan más rápido.
- Menos espacio en disco: Se ahorra almacenamiento en los registros y los hosts.
- Menor superficie de ataque: Menos componentes implican menos vulnerabilidades potenciales.
- Mayor seguridad: La imagen de producción solo contiene lo esencial.
El problema de la etapa única
Considere una aplicación compilada, como una escrita en Go. Un Dockerfile tradicional de una sola etapa incluiría todo el compilador de Go y las dependencias de desarrollo en la imagen final.
Esto hace que la imagen final sea mucho más grande de lo necesario, ya que el compilador no se necesita para ejecutar el binario compilado.
Ejemplo de etapa única (Go)
A continuación se muestra una aplicación sencilla de Go y un Dockerfile que la compila en una sola etapa. Observe que el entorno de compilación se incluye en la imagen final.
main.go:
package main
import "fmt"
func main() {
fmt.Println("Hello from Single-Stage Docker!")
}Dockerfile de etapa única
Este Dockerfile utiliza `golang:1.21-alpine` como base. Después de compilar la aplicación, esta imagen base de gran tamaño, junto con todas sus herramientas de compilación, permanece en la imagen final.
FROM golang:1.21-alpine
WORKDIR /app
COPY main.go .
RUN go build -o myapp main.go
EXPOSE 8080
CMD ["./myapp"]Anatomía de las compilaciones multietapa
Las compilaciones multietapa resuelven este problema al permitir definir varias instrucciones `FROM` en un solo Dockerfile. Cada `FROM` inicia una nueva etapa de compilación.
- Utilice la palabra clave
ASpara asignar un nombre a una etapa (por ejemplo,FROM golang:1.21-alpine AS builder). - A continuación, puede copiar artefactos de una etapa anterior mediante
COPY --from=<stage_name>.
Solo la etapa final se guarda como imagen.
Estructura multietapa
Un Dockerfile multietapa típico tiene al menos dos etapas:
- Etapa de compilación: Contiene todas las herramientas y el código fuente necesarios para compilar la aplicación.
- Etapa de ejecución: Una imagen base mínima que solo incluye la aplicación compilada y sus dependencias de ejecución.
La imagen intermedia de la etapa de compilación se descarta, dejando una imagen final ligera.
Ejemplo de compilación multietapa (Go)
Reescribamos el Dockerfile de nuestra aplicación de Go mediante un enfoque multietapa. Compilaremos la aplicación en la primera etapa y, después, copiaremos únicamente el binario compilado a una imagen base `alpine` mucho más pequeña.
# Stage 1: Build the application
FROM golang:1.21-alpine AS builder
WORKDIR /app
COPY main.go .
RUN go build -o myapp main.go
# Stage 2: Create the final lightweight image
FROM alpine:latest
WORKDIR /app
COPY --from=builder /app/myapp .
EXPOSE 8080
CMD ["./myapp"]Ejecución de una compilación multietapa
Al compilar este Dockerfile, Docker ejecuta cada etapa. Sin embargo, solo el contenido de la última instrucción `FROM`, combinado con los archivos copiados de las etapas anteriores, forma la imagen final.
El resultado es una imagen considerablemente más pequeña que la de una compilación de una sola etapa, ya que el compilador de Go y las herramientas de compilación se quedan atrás.
Ventajas de las compilaciones multietapa
Las compilaciones multietapa son especialmente útiles para:
- Lenguajes compilados: Go, Java, C++ y Rust.
- Frameworks de frontend: Compilar aplicaciones de React o Angular y servir recursos estáticos con Nginx.
- Aplicaciones de Node.js: Instalar `node_modules` en una etapa de compilación y copiar después únicamente `package.json`, `package-lock.json` y la aplicación compilada a una imagen de ejecución ligera.
Compruebe sus conocimientos
¿Cuáles de las siguientes son las principales ventajas de utilizar compilaciones multietapa de Docker?
Repaso: eficiencia multietapa
¡Ha aprendido sobre las compilaciones multietapa de Docker!
- Implican varias instrucciones
FROMen un solo Dockerfile. - La palabra clave
ASasigna nombres a las etapas, yCOPY --from=transfiere artefactos. - La principal ventaja son unas imágenes finales mucho más pequeñas, seguras y eficientes.
Esta técnica es fundamental para optimizar sus aplicaciones contenerizadas. A continuación, veremos cómo aprovechar la caché de compilación.
Preguntas frecuentes
¿La lección «Compilaciones multietapa para mejorar la eficiencia» es gratis?
Sí — el texto completo de «Compilaciones multietapa para mejorar la eficiencia» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Docker & DevOps Fundamentals, actualiza a CoddyKit PRO. El curso de Docker & DevOps Fundamentals incluye 4 lecciones en total.
¿Qué aprenderé en «Compilaciones multietapa para mejorar la eficiencia»?
Utilice compilaciones multietapa para crear imágenes de producción más pequeñas y seguras separando las dependencias de compilación y ejecución. Practicas Docker & DevOps Fundamentals con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Docker & DevOps Fundamentals?
No se requiere experiencia previa. Docker & DevOps Fundamentals en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.
¿Cuánto tiempo toma la lección «Compilaciones multietapa para mejorar la eficiencia»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Docker & DevOps Fundamentals?
Sí. Cada lección de Docker & DevOps Fundamentals incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Compilaciones multietapa para mejorar la eficiencia
- Aprovechamiento de la caché de compilación
- Buenas prácticas de seguridad para Dockerfiles
- Minimización del tamaño de imágenes con bases Slim y Distroless