Ressources et limites
Sans limites, un container peut consommer l'intégralité de la mémoire ou du CPU de l'hôte et dégrader tous les autres services. Les cgroups permettent de garantir une qualité de service prévisible. En production, toujours définir des limites.
Limites mémoire
# Limiter la mémoire RAM
docker run -d --memory 512m myapp:latest
# Mémoire + swap (swap = memory * 2 par défaut si non spécifié séparément)
docker run -d --memory 512m --memory-swap 512m myapp:latest # désactive le swap
# Réservation (soft limit : garantie mais non stricte)
docker run -d --memory 512m --memory-reservation 256m myapp:latestQuand la limite mémoire est atteinte, le kernel tue le processus (OOM kill). Le container se retrouve avec un exit code 137. Vérifier docker inspect : OOMKilled: true.
Limites CPU
# Nombre de CPUs (fraction acceptée)
docker run -d --cpus 0.5 myapp:latest # max 50% d'un CPU
# Poids relatif (priorité entre containers, défaut = 1024)
docker run -d --cpu-shares 512 myapp:low-priority
docker run -d --cpu-shares 2048 myapp:high-priority
# Affinité (pinning sur des CPUs spécifiques)
docker run -d --cpuset-cpus "0,2" myapp:latestLimites I/O disque
# Limiter le débit lecture/écriture
docker run -d --device-read-bps /dev/sda:50mb --device-write-bps /dev/sda:50mb myapp:latest
# Limiter les IOPS
docker run -d --device-read-iops /dev/sda:1000 --device-write-iops /dev/sda:500 myapp:latestLimites processus
# Nombre maximum de processus (protection fork bomb)
docker run -d --pids-limit 200 myapp:latestMonitoring des ressources
# Stats en temps réel
docker stats
# Stats d'un container spécifique, snapshot
docker stats --no-stream myapp
# Format personnalisé
docker stats --format "table {{.Name}} {{.CPUPerc}} {{.MemUsage}}" --no-streamcgroups v2
Debian 13 utilise cgroups v2 par défaut. Docker prend en charge cgroups v2 depuis la version 20.10. Avec cgroups v2, --memory-swap est calculé différemment : la valeur correspond maintenant au swap seul (pas mémoire + swap comme en v1).
# Vérifier la version de cgroups
stat -f /sys/fs/cgroup | grep Type
mount | grep cgroup