En este módulo aprenderás:
- Crea imágenes optimizadas con multi-stage builds, almacenamiento en caché de paquetes y .dockerignore.
- Comandos y configuraciones clave para 03. Dockerfile Pro para Devs
- Ejercicios prácticos listos para probar en tu terminal local
Escribir un Dockerfile Limpio y Rápido
Mano, un Dockerfile desordenado puede pesar 1.5 GB y tardar 10 minutos en compilar. Un Dockerfile optimizado pesa 100 MB y aprovecha la caché de capas para compilar en 3 segundos.
1. El Archivo .dockerignore (OBLIGATORIO)
Crea un archivo .dockerignore en la raíz de tu proyecto para evitar copiar node_modules o carpetas temporales a la imagen:
.dockerignoretext
node_modules
.git
.astro
dist
.env
*.log
2. Dockerfile Multi-Stage Pro (Node.js + pnpm)
Dockerfiledockerfile
# --- Etapa 1: Base de dependencias ---
FROM node:22-alpine AS base
ENV PNPM_HOME="/pnpm"
ENV PATH="$PNPM_HOME:$PATH"
RUN corepack enable
WORKDIR /app
COPY package.json pnpm-lock.yaml ./
# --- Etapa 2: Instalación de dependencias ---
FROM base AS deps
RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --frozen-lockfile
# --- Etapa 3: Build de producción ---
FROM base AS builder
COPY --from=deps /app/node_modules ./node_modules
COPY . .
RUN pnpm run build
# --- Etapa 4: Runner liviano final ---
FROM node:22-alpine AS runner
WORKDIR /app
ENV NODE_ENV=production
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
COPY package.json ./
EXPOSE 4321
CMD ["node", "dist/server/entry.mjs"]
Capas de caché en Docker
Coloca siempre las instrucciones que cambian menos seguido (como COPY package.json e RUN pnpm install) ARRIBA del COPY . .. De esa forma, al editar tu código fuente, Docker no volverá a descargar todos los paquetes de npm.
Ejercicio Práctico Ninja 🥷
- Crea un
.dockerignoreen tu proyecto actual. - Escribe el
Dockerfilede tu aplicación. - Compila la imagen ejecutando
docker build -t mi-app:latest .y mide el tiempo de build.