¿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
| Enfoque | Tamañ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 |