Skip to content
NeuralSkills
Despliegue

Optimizacion de Docker

Optimiza imagenes Docker para produccion — reduce tiempos de build, achica imagenes y elimina vulnerabilidades de seguridad.

Intermedio Gratis Publicado: 15 de abril de 2026
Herramientas Compatibles claude-codechatgptgeminicopilotcursorwindsurfuniversal

El Problema

Tu imagen Docker pesa 2GB, tarda 15 minutos en construirse y contiene docenas de vulnerabilidades conocidas. Incluye dependencias de desarrollo de Node.js, herramientas de build y caches completos del sistema operativo que no tienen nada que hacer en produccion. Imagenes infladas significan despliegues mas lentos, mayores costos de registry, mayor superficie de ataque y latencia de cold-start que arruina tu estrategia de escalado.

El Prompt

Eres un experto en optimizacion de Docker. Analiza mi Dockerfile y optimizalo para produccion.

MI DOCKERFILE:
[pega tu Dockerfile completo aqui]

TIPO DE APLICACION: [ej., API Node.js, servicio ML Python, microservicio Go, sitio estatico]
TAMAÑO ACTUAL DE IMAGEN: [ej., 1.8GB]
TIEMPO DE BUILD: [ej., 12 minutos]

Optimiza en estas dimensiones:
1. **Builds multi-stage**: Separa dependencias de build de las de ejecucion. Muestra el Dockerfile multi-stage optimizado.
2. **Cache de layers**: Reordena instrucciones para maximizar cache hits. Explica cuales layers cambian frecuente vs. raramente.
3. **Seleccion de imagen base**: Recomienda la imagen base segura mas pequeña (alpine, distroless, scratch) con sus tradeoffs.
4. **Poda de dependencias**: Identifica y elimina dependencias de desarrollo, herramientas de build, caches y archivos innecesarios.
5. **Hardening de seguridad**: Ejecutar como usuario non-root, eliminar capabilities innecesarias, filesystem read-only donde sea posible.
6. **.dockerignore**: Genera un archivo .dockerignore completo para mi tipo de proyecto.
7. **Comparacion de tamaño**: Muestra tamaño esperado antes/despues para cada optimizacion.

Ejemplo de Salida

Resultados de optimizacion (API Node.js):
Antes: 1.8GB (node:20) → Despues: 148MB (node:20-alpine, multi-stage)

Cambios clave:
1. Multi-stage: Stage de build (npm ci + tsc) → Stage de produccion (solo dist/ + node_modules --omit=dev)
2. Orden de layers: COPY package*.json → RUN npm ci → COPY src/ (npm install cacheado en cambios de codigo)
3. Base: node:20-alpine en vez de node:20 (ahorra 900MB)
4. Poda: npm prune --omit=dev en stage de produccion (ahorra 340MB)
5. Seguridad: USER node, HEALTHCHECK agregado, sin proceso root

Cuando Usarlo

Usa este skill cuando tus imagenes Docker superen los 500MB, tus builds tomen mas de 5 minutos, o estes preparando contenedores para despliegue en produccion. Ejecutalo cada vez que configures un nuevo Dockerfile o cuando un escaneo de seguridad reporte vulnerabilidades en tu imagen base.

Consejos Pro

  • El orden importa para el caching — pon instrucciones que cambian raramente (paquetes del OS, dependencias) antes de las que cambian frecuentemente (codigo fuente). Un solo COPY mal ubicado invalida todos los layers de cache subsiguientes.
  • Usa .dockerignore religiosamente — sin el, COPY . . envia todo el contexto de tu proyecto (incluyendo node_modules, .git y fixtures de tests) al daemon de Docker, ralentizando cada build.
  • Fija tu imagen base por digestFROM node:20-alpine@sha256:abc123 asegura builds reproducibles. Tags como latest o incluso 20-alpine pueden cambiar sin que te des cuenta.
  • Mide despues de cada optimizacion — usa docker images y docker history para verificar la reduccion de tamaño. A veces una optimizacion que esperas que ayude en realidad agrega layers.