Inicio > Cursos > Docker & Kubernetes > Docker en Produccion: builds y seguridad
Docker & KubernetesDocker FundamentosLección 5 de 12

Docker en Produccion: builds y seguridad

En produccion necesitas imagenes pequenas, seguras y eficientes. Las tecnicas clave son:

• Multi-stage builds: Usar una imagen para compilar y otra (minima) para ejecutar • Health checks: Docker verifica automaticamente si tu app esta sana • Seguridad: No ejecutar como root, usar imagenes minimas, escanear vulnerabilidades • Distroless: Imagenes de Google sin shell ni herramientas — solo tu binario • Logging: Configurar salida de logs para sistemas de monitoreo

# Multi-stage build: imagen final de ~50MB en vez de ~1GB

# Etapa 1: Compilar
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

# Etapa 2: Ejecutar (solo lo necesario)
FROM node:20-alpine AS production
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
COPY --from=builder /app/package.json ./

# No ejecutar como root
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
USER appuser

EXPOSE 3000
HEALTHCHECK --interval=30s --timeout=3s --retries=3 \
  CMD wget --spider -q http://localhost:3000/health || exit 1

CMD ["node", "dist/server.js"]
# Ejemplo con imagen distroless (Go)
FROM golang:1.22-alpine AS builder
WORKDIR /app
COPY . .
RUN CGO_ENABLED=0 go build -o server .

# Imagen distroless: sin shell, sin apt, sin nada extra
FROM gcr.io/distroless/static-debian12
COPY --from=builder /app/server /
EXPOSE 8080
CMD ["/server"]
# Resultado: imagen de ~10MB, superficie de ataque minima
# Buenas practicas de seguridad en Docker

# Escanear vulnerabilidades en una imagen
docker scout cves mi-app:latest

# Ver el historial de capas de una imagen
docker history mi-app:latest

# Limitar recursos del contenedor
docker run -d --memory=512m --cpus=1.0 mi-app:latest

# Ejecutar en modo read-only (filesystem inmutable)
docker run -d --read-only --tmpfs /tmp mi-app:latest

# Configurar logging
docker run -d --log-driver=json-file \
  --log-opt max-size=10m \
  --log-opt max-file=3 \
  mi-app:latest
ConsejoSiempre usa USER para no ejecutar como root. Un atacante que comprometa tu app tendra permisos limitados si no es root dentro del contenedor.
← Docker Networking: conectando contenedoresQue es Kubernetes y cuando usarlo →

Practica esta lección

Resuelve los ejercicios del curso de Docker & Kubernetes en la app, gratis y con corrección automática.

Empezar a practicar