Volver al curso

DevOps Moderno: CI/CD, Docker y Kubernetes

leccion
3 / 12
advanced
30 horas
Contenedores con Docker

Docker en Produccion: Seguridad y Buenas Practicas

Lectura
50 min~2 min lectura

Docker en Produccion: Lo que Nadie te Ensena

Usar Docker en desarrollo es facil. Usarlo en produccion de forma segura y eficiente requiere conocimientos especificos que muchos cursos ignoran. En esta leccion cubrimos las practicas que separan a un DevOps junior de un senior.

Seguridad de Contenedores

PracticaQue hacerPor que
No correr como rootUSER node en DockerfileLimita el impacto de una vulnerabilidad
Imagenes minimasUsar alpine o distrolessMenos superficie de ataque
Escanear vulnerabilidadesdocker scout, trivy, snykDetectar CVEs conocidos
SecretosDocker secrets o vault, NUNCA ENVENV visibles en docker inspect
Read-only filesystemread_only: true en composePreviene modificaciones maliciosas
# Dockerfile seguro para produccion
FROM node:20-alpine AS builder
RUN apk add --no-cache dumb-init
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production && npm cache clean --force
COPY . .
RUN npm run build

FROM gcr.io/distroless/nodejs20-debian12
WORKDIR /app
COPY --from=builder /usr/bin/dumb-init /usr/bin/dumb-init
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
COPY --from=builder /app/package.json ./

ENTRYPOINT ["dumb-init", "--"]
CMD ["node", "dist/server.js"]

🚀 Dato Clave

Usa dumb-init o tini como init system. Sin el, tu proceso Node.js no maneja signals correctamente (SIGTERM) y Kubernetes tardara 30 segundos en matar el pod en lugar de hacer graceful shutdown.

Optimizacion de Imagenes

# .dockerignore - SIEMPRE incluir
node_modules
.git
.env*
*.md
tests/
coverage/
.next/
dist/
Base ImageTamanoUso
node:20~1.1 GBSolo desarrollo
node:20-slim~250 MBProduccion basica
node:20-alpine~180 MBProduccion optimizada
distroless~130 MBMaxima seguridad

Logging y Monitoreo

En produccion, los logs de Docker deben ir a un sistema centralizado. Nunca dependas solo de docker logs.

# docker-compose con logging centralizado
services:
  app:
    logging:
      driver: 'json-file'
      options:
        max-size: '10m'
        max-file: '3'
        tag: '{{.Name}}'
Infraestructura segura

Con estas practicas, tus contenedores estan listos para produccion real.