TechLead
Lección 8 de 18
5 min de lectura
Docker

Builds Multi-Etapa

Optimiza imágenes Docker con builds multi-etapa para reducir el tamaño y mejorar la seguridad

¿Qué son los Builds Multi-Etapa?

Los builds multi-etapa te permiten usar múltiples instrucciones FROM en un solo Dockerfile. Cada FROM crea una nueva etapa de construcción, y puedes copiar selectivamente artefactos de una etapa a otra. Esto reduce dramáticamente el tamaño final de la imagen al excluir herramientas de construcción y dependencias.

La Solución: Build Multi-Etapa

# ✅ Build multi-etapa — imagen de producción limpia
# Etapa 1: Construcción
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

# Etapa 2: Producción
FROM node:20-alpine AS production
WORKDIR /app
COPY --from=builder /app/package*.json ./
RUN npm ci --production
COPY --from=builder /app/dist ./dist

ENV NODE_ENV=production
EXPOSE 3000
CMD ["node", "dist/server.js"]
# Imagen final: sin código fuente, sin devDeps
# Tamaño: ~150 MB ✅

Aplicación Go — Reducción Extrema de Tamaño

# Etapa 1: Construcción
FROM golang:1.22-alpine AS builder
WORKDIR /app
COPY go.* ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 GOOS=linux go build -o server .

# Etapa 2: Imagen de producción mínima
FROM scratch
COPY --from=builder /app/server /server
EXPOSE 8080
ENTRYPOINT ["/server"]
# ¡Imagen final: ~10 MB!

Comparación de Tamaños

EnfoqueTamaño Típico
Una etapa Node.js~1.2 GB
Multi-etapa Node.js (Alpine)~150 MB
Una etapa Go~300 MB
Multi-etapa Go (scratch)~10 MB

Continuar Aprendiendo