Modèles de conteneurs
Modèles d'utilisation efficaces des conteneurs pour le développement et la production.
Constructions en plusieurs étapes
Réduisez la taille de l’image en séparant la construction et l’exécution :
# 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"]
Bilans de santé
Incluez toujours des contrôles de santé :
HEALTHCHECK --interval=30s --timeout=3s --retries=3 \
CMD curl -f http://localhost:8000/health || exit 1
Docker Compose pour le développement
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
Bonnes pratiques de sécurité
- Utiliser un utilisateur non root
RUN useradd -m appuser
USER appuser
- Épingler les versions d'images
FROM python:3.11.7-slim # Not just :latest
- Rechercher les vulnérabilités
docker scan myimage:latest
trivy image myimage:latest
- Utilisez
.dockerignore
.git
.env
__pycache__
*.pyc
Limites des ressources
Fixez toujours des limites en production :
deploy:
resources:
limits:
cpus: "1.0"
memory: 512M
reservations:
cpus: "0.25"
memory: 128M