Limites de ressources Docker : empêcher une fuite mémoire de faire tomber le serveur

L’alarme du téléphone sonne — « serveur ne répond pas », « CPU 100 % », « timeout SSH ». Trois tentatives VPN avant de se connecter, la commande ssh — timeout. Le serveur est bloqué.
Après un redémarrage forcé, les logs révèlent la cause : un conteneur tournant depuis six mois avec une fuite mémoire, passé de 500 Mo à 16 Go, ayant épuisé toute la RAM. SSH n’avait plus de ressources pour répondre. Trois autres conteneurs normaux sont tombés avec lui — la production s’est effondrée. En 2024, Docker 27.0.3 a révélé un bug grave de fuite mémoire : 68 conteneurs tués d’un coup par l’OOM Killer.
Cet article répond à une question claire : comment empêcher un seul conteneur de faire tomber le serveur. Des cgroups en bas niveau aux paramètres --memory et --cpus, en passant par docker stats, cAdvisor et Prometheus — tout sur les limites de ressources Docker. Après lecture, vous saurez au minimum faire mourir le conteneur seul quand une fuite apparaît, plutôt que d’entraîner tout le serveur.
Pourquoi un conteneur peut-il faire tomber le serveur ?
Docker a une « particularité » : par défaut, les conteneurs n’ont aucune limite de ressources. Ça semble libérateur, non ? Assez libre pour qu’un conteneur consomme toute la mémoire et le CPU de l’hôte — et que tout le monde y passe.
Cas réel avec Docker 27.4.0 : un utilisateur a constaté que dockerd passait de quelques centaines de Mo à 8 Go en quelques jours, rendant le serveur très lent. Ce n’est pas Docker qui est instable — si vous ne fixez pas de limites, le conteneur galope comme un cheval sans bride.
Le noyau Linux active alors un mécanisme « tueur » — l’OOM Killer (Out Of Memory Killer). Quand la mémoire manque, il choisit le processus « le plus approprié » à tuer. Comment ? Chaque processus reçoit un score (oom_score) ; plus il est élevé, plus le risque est grand. Les processus dans les conteneurs ont souvent un score élevé, mais le daemon Docker est plus malin : il abaisse sa priorité OOM (oom_score_adj à -500), donc ce sont vos conteneurs qui prennent le coup.
Dans docker ps, le conteneur a disparu ; les logs montrent Exit Code 137. Signification : 128 + 9 (signal SIGKILL) — « tué de force ». Pas une sortie propre, une exécution par le noyau.
Symptômes typiques d’une fuite mémoire :
- La mémoire du conteneur monte en flèche, de quelques centaines de Mo à plusieurs Go
- Le serveur swappe frénétiquement, le disque clignote
- Les autres conteneurs ralentissent puis tombent
- Vos graphiques de monitoring dessinent une belle droite montante
En 2024, un cas de la communauté Storj était extrême : un conteneur est passé de quelques centaines de Mo à 37 Go, menaçant tout le nœud de stockage. Avec une limite mémoire à 1 Go, l’OOM Killer aurait stoppé le conteneur bien avant — le serveur serait resté stable.
[Image : courbe de fuite mémoire]
Prompt : server memory usage graph showing sharp upward spike, red critical zone at 90%, dark background, monitoring dashboard style, high quality
cgroups : le principe sous-jacent des limites
Vous avez entendu parler des cgroups pour les limites Docker — qu’est-ce que c’est ? En bref, cgroups (Control Groups) est une fonctionnalité du noyau Linux qui fixe des quotas par groupe de processus — comme une « carte ressources » : une fois le plafond atteint, plus de dépassement.
Docker crée un cgroup à la création du conteneur et y place les processus. Quand vous lancez docker run -m 512m nginx, Docker écrit dans /sys/fs/cgroup/memory/docker/<containerID>/memory.limit_in_bytes la valeur 536870912 (512 Mo en octets). Le noyau lit ce fichier : ce conteneur a 512 Mo max, au-delà il est stoppé.
cgroups v1 vs v2 :
- v1 : mémoire, CPU, I/O disque en sous-systèmes séparés, chacun gère son domaine
- v2 : gestion unifiée, hiérarchie plus claire, mieux adaptée aux conteneurs
- Anciens systèmes (RHEL 7) encore en v1 ; récents (Ubuntu 20.04+, RHEL 8+) basculent vers v2
Pour inspecter la config cgroup d’un conteneur :
# Trouver l'ID complet du conteneur
docker inspect --format='{{.Id}}' my_container
# Limite mémoire (cgroups v1)
cat /sys/fs/cgroup/memory/docker/<containerID>/memory.limit_in_bytes
# Quota CPU (cgroups v1)
cat /sys/fs/cgroup/cpu/docker/<containerID>/cpu.cfs_quota_us
La première fois que j’ai vu ces fichiers, j’étais perplexe : des limites via le système de fichiers ? C’est la philosophie Linux « everything is a file » — le noyau expose la config cgroup en fichiers, Docker écrit, le noyau applique. Élégant.
[Image : schéma hiérarchie cgroups]
Prompt : Linux cgroups hierarchy diagram, containers grouped under docker cgroup, memory and CPU subsystems, tree structure, technical illustration, clean design, high quality
Paramètres mémoire : guide complet
Les paramètres mémoire Docker sont nombreux ; en pratique, quelques-uns suffisent. Détail.
1. --memory / -m (limite dure, la plus importante)
Paramètre vital. À cette valeur, l’OOM Killer tue le conteneur. Minimum théorique 6 Mo (peu utilisable) ; en production, comptez au minimum quelques centaines de Mo.
# Limiter à 512 Mo
docker run -m 512m nginx
# Unité GB
docker run -m 2g my-app
Comment choisir ? Mon approche : stress-test en conditions normales, puis multiplier par 1,2 à 1,5. Application à 300 Mo → 400-450 Mo est raisonnable. Trop bas : OOM fréquents ; trop haut : protection affaiblie.
2. --memory-swap (swap, souvent mal compris)
Ce paramètre fixe le total mémoire + swap, pas le swap seul.
# 512 Mo RAM + 512 Mo swap (1 Go au total)
docker run -m 512m --memory-swap 1g nginx
# Désactiver le swap (RAM seule)
docker run -m 512m --memory-swap 512m nginx
# Swap illimité (dangereux !)
docker run -m 512m --memory-swap -1 nginx
Sans --memory-swap, par défaut swap = memory : total utilisable = 2 × memory. -m 512m → jusqu’à 1 Go (512 Mo + 512 Mo swap).
Production : désactiver le swap (--memory-swap = --memory) ou limiter le swap à la moitié de la RAM. Évitez -1 : le swap excessif tue le disque.
3. --memory-reservation (limite souple)
« Plafond flexible ». Si la RAM de l’hôte est disponible, le conteneur peut dépasser ; sous pression, le noyau le ramène sous ce seuil. Doit être inférieur à --memory.
# Souple 750 Mo, dur 1 Go
docker run -m 1g --memory-reservation 750m nginx
Utile pour des pics courts (batch) avec une consommation basse au repos.
4. --kernel-memory (mémoire noyau, à manier avec prudence)
Limite la mémoire noyau (buffers réseau, cache FS) — non swappable. Sauf expertise, évitez : une mauvaise valeur empêche le démarrage.
5. --oom-kill-disable (paramètre dangereux)
Désactive l’OOM Killer : le conteneur n’est pas tué en cas de dépassement. Erreur grave. Sans kill, la fuite épuise toute la RAM du serveur.
# Dangereux ! (mémoire illimitée effective)
docker run --oom-kill-disable nginx
# Si vraiment nécessaire, toujours avec limite mémoire
docker run -m 512m --oom-kill-disable nginx
Quand l’utiliser ? Presque jamais. Sauf processus qui ne doit pas être tué brutalement (checkpoint base de données) et contrôle mémoire garanti côté application.
Cas réel : sur AWS, un conteneur sans limite a atteint 30 Go et rendu l’instance inutilisable. Après -m 2g, le conteneur meurt et redémarre à la limite — le serveur reste stable.
[Image : relation paramètres mémoire]
Prompt : Docker memory parameters diagram, showing memory and swap relationship, visual chart with bars and labels, technical illustration, blue and orange colors, high quality
Paramètres CPU : guide complet
Les limites CPU sont plus douces — pas de kill, juste un ralentissement. Mais un CPU incontrôlé peut aussi paralyser le serveur.
1. --cpus (le plus intuitif)
Nombre de cœurs CPU utilisables, décimaux acceptés.
# 1,5 cœur max
docker run --cpus="1.5" nginx
# Demi-cœur
docker run --cpus="0.5" my-app
Sous le capot, c’est --cpu-period + --cpu-quota. À 1,5, le conteneur utilise au plus 1,5 cœur à un instant — un cœur plein plus 50 % d’un autre.
2. --cpu-shares (poids relatif, pas une limite dure)
Priorité de planification CPU, défaut 1024. Ne s’applique que si le CPU est saturé. Si l’hôte est idle, le conteneur peut utiliser tout ce qu’il veut.
# A reçoit 2× le temps CPU de B
docker run --cpu-shares 2048 --name app_a my-app
docker run --cpu-shares 1024 --name app_b my-app
Sur 2 cœurs saturés, répartition ~2:1 — A ~1,33 cœur, B ~0,67. CPU libre : les deux vont à fond.
Usage : plusieurs conteneurs, prioriser un service (API vs tâches batch).
3. --cpuset-cpus (cœurs dédiés)
Épingler le conteneur sur certains cœurs uniquement.
# Cœurs 0 et 3 seulement
docker run --cpuset-cpus="0,3" nginx
# Cœurs 2 à 5
docker run --cpuset-cpus="2-5" my-app
Cas d’usage :
- NUMA : serveur multi-socket, conteneur sur un socket pour limiter l’accès mémoire inter-socket
- Cache CPU : processus fixes, meilleur taux de hit cache
- Isolation : service critique sur cœurs dédiés
Dans un cluster Kubernetes, j’ai vu une base liée aux 4 derniers cœurs d’un hôte 8 cœurs, les 4 premiers pour le web — gain notable.
4. --cpu-period et --cpu-quota (contrôle fin)
Paramètres bas niveau ; --cpus les encapsule.
--cpu-period: période CFS, défaut 100 000 µs (100 ms)--cpu-quota: temps CPU max par période (µs)
# 50 ms CPU sur 100 ms (≈ 0,5 cœur)
docker run --cpu-period=100000 --cpu-quota=50000 nginx
# Équivalent à
docker run --cpus="0.5" nginx
En général --cpus suffit, sauf besoin de périodes très courtes.
Cas réel : bug avec boucle infinie dans un pool de threads, CPU à 800 % (hôte 8 cœurs). Sans limite, SSH inaccessible. Après --cpus="2" partout, le bug ne ralentit que le conteneur fautif.
[Image : comparaison limites CPU]
Prompt : CPU usage comparison chart, with and without limits, before/after graph showing CPU spike prevention, performance monitoring dashboard, clean visualization, high quality
Surveillance en conditions réelles
Fixer des limites n’est que la première étape — il faut aussi mesurer l’utilisation réelle. Attendre l’OOM pour découvrir la fuite, c’est trop tard.
Outil 1 : docker stats (intégré, coût zéro)
Le plus simple, inclus dans Docker.
# Rafraîchissement temps réel, Ctrl+C pour quitter
docker stats
# Une seule sortie, pour scripts
docker stats --no-stream
# Conteneurs spécifiques
docker stats nginx_container mysql_container
Exemple de sortie :
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O
a1b2c3d4e5f6 nginx 0.50% 45.2MiB / 512MiB 8.83% 1.2kB / 0B
Avantages : prêt à l’emploi.
Inconvénients : pas d’historique, pas d’alerte, pas de visualisation riche. Bon pour le dépannage ponctuel, pas la surveillance long terme.
Outil 2 : cAdvisor (Google, spécialiste conteneurs)
cAdvisor (Container Advisor) détecte tous les conteneurs de l’hôte, collecte CPU, mémoire, réseau, I/O disque, avec interface web et export Prometheus.
Lancement simple :
docker run -d \
--name=cadvisor \
--restart=always \
-p 8080:8080 \
-v /:/rootfs:ro \
-v /var/run:/var/run:ro \
-v /sys:/sys:ro \
-v /var/lib/docker/:/var/lib/docker:ro \
-v /dev/disk/:/dev/disk:ro \
gcr.io/cadvisor/cadvisor:latest
http://IP_SERVEUR:8080 pour les tendances ; http://IP_SERVEUR:8080/metrics pour Prometheus.
Avantages : complet, écosystème Prometheus.
Inconvénients : ~2 minutes d’historique seulement — Prometheus pour la rétention longue.
Outil 3 : Prometheus + Grafana (niveau entreprise)
Stack complète :
- cAdvisor : collecte
- Prometheus : stockage
- Grafana : visualisation + alertes
docker-compose.yml complet :
version: '3.8'
services:
cadvisor:
image: gcr.io/cadvisor/cadvisor:latest
container_name: cadvisor
ports:
- "8080:8080"
volumes:
- /:/rootfs:ro
- /var/run:/var/run:ro
- /sys:/sys:ro
- /var/lib/docker/:/var/lib/docker:ro
- /dev/disk/:/dev/disk:ro
restart: always
prometheus:
image: prom/prometheus:latest
container_name: prometheus
ports:
- "9090:9090"
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
- prometheus_data:/prometheus
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.path=/prometheus'
restart: always
grafana:
image: grafana/grafana:latest
container_name: grafana
ports:
- "3000:3000"
volumes:
- grafana_data:/var/lib/grafana
environment:
- GF_SECURITY_ADMIN_PASSWORD=admin
restart: always
volumes:
prometheus_data:
grafana_data:
prometheus.yml associé :
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'cadvisor'
static_configs:
- targets: ['cadvisor:8080']
Après déploiement :
- Prometheus scrape cAdvisor toutes les 15 s
- Grafana sur
http://IP_SERVEUR:3000(admin/admin par défaut) - Ajouter Prometheus comme source (
http://prometheus:9090) - Importer un dashboard (ID recommandé : 19908, dédié Docker)
Métriques clés :
container_memory_usage_bytes: mémoire actuellecontainer_memory_max_usage_bytes: pic historiquecontainer_cpu_load_average_10s: charge CPU 10 scontainer_fs_io_time_seconds_total: temps I/O disque
Alerte à 80 % de mémoire par e-mail ou Slack — vous attrapez le problème avant l’explosion.
Franchement, la mise en place demande un effort, mais c’est durable. Mes 20+ conteneurs sont sous Grafana — plus de réveil nocturne.
[Image : dashboard Grafana conteneurs]
Prompt : Grafana dashboard showing Docker container metrics, memory and CPU graphs, clean modern UI, dark theme, monitoring panels with colorful charts, high quality
Flux complet de diagnostic d’une fuite mémoire
Alerte ou conteneur mort sans raison apparente ? Suivez ce flux.
Étape 1 : détecter l’anomalie
docker stats pour voir quel conteneur gonfle :
docker stats --no-stream | grep -v "0.00%"
Mémoire proche de la limite ? Vérifier un OOM récent :
# Événements OOM
docker events --filter 'event=oom' --since '24h'
# Code de sortie
docker inspect <nom_conteneur> --format='{{.State.ExitCode}}'
# 137 = tué par l'OOM Killer
Étape 2 : analyser la consommation
Entrer dans le conteneur pour identifier le processus :
# Entrer dans le conteneur
docker exec -it <nom_conteneur> /bin/bash
# Classement par mémoire (top/htop requis)
top -o %MEM
# Ou ps
ps aux --sort=-%mem | head -n 10
Application Java : exporter un heap dump :
# PID Java
jps
# Heap dump
jcmd <PID> GC.heap_dump /tmp/heap.hprof
# Copier pour analyse
docker cp <nom_conteneur>:/tmp/heap.hprof ./
Étape 3 : mesures d’urgence
Le service est impacté — soulagement temporaire :
# Redémarrer (perte des données temporaires du conteneur)
docker restart <nom_conteneur>
# Ajuster la limite à chaud
docker update --memory 1g --memory-swap 1g <nom_conteneur>
# Nettoyer les ressources inutilisées (attention : supprime images/conteneurs non utilisés)
docker system prune -a
Étape 4 : correction durable
Les mesures d’urgence ne suffisent pas :
- Corriger le code : connexions non fermées, cache sans borne, gros objets non libérés
- Limites : si absentes, ajouter
--memoryimmédiatement - Surveillance : Prometheus + Grafana pour alerter avant la crise
- Redémarrage auto :
--restart=on-failure:3, max 3 redémarrages après OOM
Aide-mémoire commandes :
# Limites de tous les conteneurs
docker ps --format "{{.Names}}" | xargs docker inspect \
--format='{{.Name}}: Memory={{.HostConfig.Memory}} CPU={{.HostConfig.NanoCpus}}'
# Nombre de redémarrages
docker inspect --format='{{.RestartCount}}' <nom_conteneur>
# Logs (100 dernières lignes)
docker logs --tail 100 <nom_conteneur>
# Détail mémoire
docker stats --no-stream --format \
"table {{.Name}}\t{{.MemUsage}}\t{{.MemPerc}}" <nom_conteneur>
Retour sur le cas Storj (37 Go) :
docker restartpour restaurer le service-m 1gpour protéger l’hôte- Logs + heap dump à l’équipe dev
- Mise à jour image après correctif
- cAdvisor + alerte à 70 % mémoire
Pénible sur le moment, mais plus de récidive depuis.
[Image : fluxogramme diagnostic mémoire]
Prompt : flowchart showing memory leak diagnosis process, step by step from detection to resolution, arrows connecting boxes, clean infographic style, blue and green colors, high quality
Bonnes pratiques et pièges à éviter
Récapitulons l’usage en production.
Checklist production
✅ Limite mémoire sur tous les conteneurs
Même un Nginx statique : 512 Mo minimum. Mieux vaut être conservateur que réparer après coup.
✅ Dev proche de la prod
Ne pas lancer sans limites en local pour découvrir le problème en prod. Visez ~80 % des limites de production en dev.
✅ Audit régulier
Chaque mois, docker stats — ajuster si les besoins ont changé.
❌ Ne pas désactiver l’OOM Killer
Sauf certitude absolue sur le contrôle mémoire de l’app, évitez --oom-kill-disable. Paramètre suicidaire.
❌ Pas de swap illimité
--memory-swap -1 est un piège : le disque meurt avant que le conteneur ne soit tué proprement.
❌ Limite trop basse
OOM fréquents = disponibilité en chute. Stress-test d’abord, limites ensuite.
Docker Compose : la bonne forme
services:
web:
image: nginx:latest
deploy:
resources:
limits:
cpus: '1.5'
memory: 512M
reservations:
cpus: '0.5'
memory: 256M
restart: on-failure:3
Champ deploy (Compose v3). limits = dur, reservations = souple. 256 Mo au repos, jusqu’à 512 Mo en charge.
Gérer plusieurs conteneurs en lot
Pour un pool de microservices, cgroup-parent :
# Groupe parent avec plafond global
docker run --cgroup-parent=/my-services -m 2g service-a
docker run --cgroup-parent=/my-services -m 2g service-b
# Les deux partagent le cgroup parent
Utile quand plusieurs conteneurs forment une unité métier à limiter globalement.
Formules empiriques
| Type d’application | Mémoire suggérée | CPU suggéré |
|---|---|---|
| Nginx statique | 256-512 Mo | 0,5-1 cœur |
| API Node.js | 512 Mo-1 Go | 1-2 cœurs |
| Microservice Java | 1-2 Go | 2-4 cœurs |
| Base (MySQL/PostgreSQL) | 2-4 Go | 2-4 cœurs |
| File d’attente (RabbitMQ/Kafka) | 1-2 Go | 1-2 cœurs |
Estimations conservatrices — adaptez au trafic. Pic observé × 1,5 pour la limite est un bon point de départ.
Comparaison avec Kubernetes
Sur Kubernetes, requests et limits ressemblent aux paramètres Docker :
- requests ≈
--memory-reservation - limits ≈
--memory
K8s centralise la config YAML ; Docker reste plus flexible (docker update à chaud).
Dernier conseil
Les limites ne sont pas « une fois pour toutes ». L’application évolue, le trafic aussi — les métriques indiquent s’il faut augmenter ou optimiser. Revoyez la config régulièrement.
[Image : tableau comparatif bonnes pratiques]
Prompt : comparison table showing Docker resource limits best practices, checkmarks and crosses, clean infographic style, professional layout, high quality
Conclusion
Retour au récit du début : réveil à 3 h du matin, serveur à terre à cause d’un conteneur. Cette leçon m’a appris que la « liberté » par défaut de Docker est un piège. Sans limites explicites, vous confiez le sort du serveur aux conteneurs.
La défense en trois lignes :
Première ligne : limites (prévention)
--memory et --cpus sur chaque conteneur — la bride sur le cheval sauvage. En cas de dérapage, le conteneur meurt seul. Étape de base et indispensable.
Deuxième ligne : surveillance (détection)
docker stats pour l’instant présent ; cAdvisor + Prometheus + Grafana pour tendances et historique. Alerte à 80 % mémoire — signaux 48 h avant la catastrophe.
Troisième ligne : diagnostic (réaction)
En cas de problème : détecter → analyser → urgence → correction. Les commandes sont dans l’article.
Des cgroups aux détails de --memory-swap, du Compose au parallèle Kubernetes — vous avez l’essentiel. Il reste l’action.
Trois actions maintenant :
- Auditez la production — conteneurs sans limite :
docker ps --format "{{.Names}}" | xargs docker inspect \
--format='{{.Name}}: Memory={{.HostConfig.Memory}} CPU={{.HostConfig.NanoCpus}}'
Memory=0 = bombe à retardement.
-
Déployez la surveillance — copiez le docker-compose.yml de l’article, 30 minutes.
-
Rappel mensuel — 1 h avec
docker statspour vérifier l’utilisation.
Je ne souhaite pas que vous appreniez comme moi à 3 h du matin. Configurez les limites tôt — vous gagnerez en sérénité.
Flux complet de configuration des limites de ressources Docker
Empêcher une fuite mémoire de faire tomber le serveur : cgroups, --memory, --cpus et surveillance
⏱️ Estimated time: 1 hr
- 1
Step 1: Comprendre la gravité du problème et le principe des cgroups
Gravité du problème :
• Une fuite mémoire fait passer un conteneur de 500 Mo à 16 Go
• Toute la RAM du serveur est consommée, SSH ne répond plus
• Les autres conteneurs tombent aussi — la production s'effondre
Principe des cgroups :
• Les cgroups du noyau Linux contrôlent l'utilisation des ressources
• Docker limite CPU, mémoire, I/O via les cgroups
• Empêche un seul conteneur de faire tomber le serveur
En 2024, Docker 27.0.3 a révélé un bug grave de fuite mémoire : 68 conteneurs ont été tués d'un coup par l'OOM Killer du noyau Linux. - 2
Step 2: Configurer les limites : mémoire et CPU
Limite mémoire :
• --memory : docker run --memory=512m container-name
• docker-compose : deploy.resources.limits.memory: 512m
• Limite swap : --memory-swap
Limite CPU :
• --cpus : docker run --cpus=1.0 container-name
• --cpu-shares pour le poids CPU
• docker-compose : deploy.resources.limits.cpus: '1.0'
Vérification :
• docker stats pour l'utilisation des ressources
• Confirmer que les limites sont actives - 3
Step 3: Déployer la surveillance et les bonnes pratiques
Surveillance :
• docker stats en temps réel : docker stats container-name
• cAdvisor avec interface visuelle :
docker run -d -p 8080:8080 --name=cadvisor google/cadvisor
• Prometheus + Grafana pour l'alerte en production :
Prometheus scrape les métriques cAdvisor, Grafana visualise
Bonnes pratiques :
• Configurer les limites en production
• Définir des valeurs raisonnables (mémoire, CPU)
• Mettre en place des alertes
• Vérifier régulièrement l'utilisation (1 h/mois avec docker stats)
• Traiter les anomalies rapidement
FAQ
Pourquoi configurer des limites de ressources Docker ?
• Une fuite mémoire fait passer un conteneur de 500 Mo à 16 Go
• Toute la RAM du serveur est consommée, SSH ne répond plus
• Les autres conteneurs tombent aussi — la production s'effondre
En 2024, Docker 27.0.3 a révélé un bug grave de fuite mémoire : 68 conteneurs ont été tués par l'OOM Killer.
Les limites empêchent un conteneur de faire tomber le serveur : en cas de fuite, le conteneur meurt seul au lieu d'entraîner tout l'hôte.
Comment configurer les limites de ressources d'un conteneur Docker ?
• --memory : docker run --memory=512m container-name
• docker-compose : deploy.resources.limits.memory: 512m
• Limite swap : --memory-swap
Limite CPU :
• --cpus : docker run --cpus=1.0 container-name
• --cpu-shares pour le poids CPU
• docker-compose : deploy.resources.limits.cpus: '1.0'
Vérification :
• docker stats pour l'utilisation des ressources
• Confirmer que les limites sont actives
Comment surveiller l'utilisation des ressources des conteneurs Docker ?
docker stats en temps réel :
• docker stats container-name
cAdvisor avec interface visuelle :
• docker run -d -p 8080:8080 --name=cadvisor google/cadvisor
Prometheus + Grafana pour l'alerte en production :
• Prometheus scrape les métriques cAdvisor
• Grafana visualise
Déploiement : copiez le docker-compose.yml de l'article et lancez-le — 30 minutes suffisent.
Contrôle régulier : 1 h/mois avec docker stats pour vérifier si l'utilisation est raisonnable.
Quelles sont les bonnes pratiques pour les limites de ressources Docker ?
• Configurer les limites en production
• Définir des valeurs raisonnables (mémoire, CPU)
• Mettre en place des alertes
• Vérifier régulièrement l'utilisation (1 h/mois avec docker stats)
• Traiter les anomalies rapidement
Plus tôt vous configurez les limites, moins vous aurez de soucis. Planifiez un rappel mensuel : 1 h avec docker stats pour auditer l'utilisation.
14 min de lecture · Publié le: 18 déc. 2025 · Mis à jour le: 27 juil. 2026
Guide pratique Docker
Si vous arrivez depuis la recherche, le plus rapide est de passer à l’article précédent ou suivant de cette série.
Précédent
Guide complet Docker Secrets : sécuriser mots de passe et clés API des conteneurs
Ne mettez plus les mots de passe de base de données dans le Dockerfile ! Ce guide détaille Docker Secrets pour gérer les informations sensibles, compare Docker/K8s/Vault et inclut une checklist complète pour la production.
Partie 31 sur 38
Suivant
Commande docker logs : 7 astuces pour diagnostiquer rapidement un conteneur
Guide pratique de la commande docker logs : 7 astuces (consultation en temps réel, filtrage par date, recherche grep, emplacement des fichiers de logs et bonnes pratiques en production) pour localiser rapidement les problèmes de conteneurs.
Partie 33 sur 38



Commentaires
Connectez-vous avec GitHub pour laisser un commentaire