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
- Usar usuario no root
RUN useradd -m appuser
USER appuser
- Fijar versiones de imágenes
FROM python:3.11.7-slim # Not just :latest
- Buscar vulnerabilidades
docker scan myimage:latest
trivy image myimage:latest
- 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