Patrones de contenedores

Mejores prácticas de Docker y contenedores para implementaciones de producción

Patrones de contenedores

Patrones efectivos de uso de contenedores para el desarrollo y la producción.

Construcciones de varias etapas

Reduzca el tamaño de la imagen separando la compilación y el tiempo de ejecución:

# Build stage
FROM python:3.11-slim AS builder
WORKDIR /app
COPY pyproject.toml .
RUN pip install build && python -m build

# Runtime stage
FROM python:3.11-slim
WORKDIR /app
COPY --from=builder /app/dist/*.whl .
RUN pip install *.whl && rm *.whl
CMD ["python", "-m", "myapp"]

Controles de salud

Incluya siempre controles de salud:

HEALTHCHECK --interval=30s --timeout=3s --retries=3 \
  CMD curl -f http://localhost:8000/health || exit 1

Docker Compose para desarrollo

version: "3.9"

services:
  app:
    build: .
    ports:
      - "8000:8000"
    volumes:
      - ./src:/app/src  # Hot reload
    environment:
      - DEBUG=true
    depends_on:
      db:
        condition: service_healthy

  db:
    image: postgres:16
    environment:
      POSTGRES_PASSWORD: devpass
    healthcheck:
      test: ["CMD", "pg_isready"]
      interval: 5s
      timeout: 5s
      retries: 5

Mejores prácticas de seguridad

  1. Usar usuario no root
RUN useradd -m appuser
USER appuser
  1. Fijar versiones de imágenes
FROM python:3.11.7-slim  # Not just :latest
  1. Buscar vulnerabilidades
docker scan myimage:latest
trivy image myimage:latest
  1. Utilice .dockerignore
.git
.env
__pycache__
*.pyc

Límites de recursos

Establezca siempre límites en la producción:

deploy:
  resources:
    limits:
      cpus: "1.0"
      memory: 512M
    reservations:
      cpus: "0.25"
      memory: 128M