6.1 Raisons de limiter les ressources des conteneurs
Docker gère super bien les ressources des conteneurs, ce qui permet de répartir efficacement la puissance du système et d’éviter des conflits inutiles entre conteneurs. C’est particulièrement important pour qu’une application sur un conteneur ne "bouffe" pas toutes les ressources et ne ralentisse pas les autres services. Limiter les ressources comme le processeur (CPU) et la mémoire aide à éviter les surcharges, garder le système stable, et garantir que toutes les applis tournent de manière prévisible. Dans cette leçon, on va voir comment poser des limites sur l’utilisation du CPU et de la mémoire pour que le système reste performant même sous forte charge.
Pourquoi c’est important de limiter les ressources des conteneurs :
- stabilité: éviter qu’un conteneur prenne toutes les ressources, ce qui peut faire ralentir les autres conteneurs ou le système lui-même.
- efficacité: une meilleure distribution des ressources entre les conteneurs pour utiliser la puissance du système au max.
- protection: limiter les ressources aide à éviter les soucis avec des conteneurs qui pourraient accidentellement ou intentionnellement surcharger le système.
6.2 Limites sur l'utilisation du CPU
Docker offre plusieurs façons de limiter l'utilisation du CPU
par les conteneurs.
Important !
Ici, par CPU
, on entend un cœur de processeur, pas tout le processeur. Un processeur quadricœur aura 4 CPU
.
1. Limite de part de CPU (--cpu-shares)
Le paramètre --cpu-shares
définit une valeur relative de priorité d'utilisation du CPU pour le conteneur. La valeur par défaut est 1024. C'est une valeur relative, ce qui signifie qu'un conteneur avec --cpu-shares=512
aura la moitié de la priorité d'un conteneur avec --cpu-shares=1024
.
Exemple d'utilisation :
Dans cet exemple, le conteneur high_priority_container
aura une priorité plus élevée pour l'allocation du CPU
par rapport à low_priority_container
.
docker run -d --name low_priority_container --cpu-shares=512 nginx
docker run -d --name high_priority_container --cpu-shares=2048 nginx
2. Limite du nombre de CPU (--cpus)
Le paramètre --cpus
définit le nombre exact de CPU
accessibles au conteneur. Par exemple, une valeur de 1.5 signifie que le conteneur peut utiliser 1.5 CPU
.
Exemple d'utilisation :
Cet exemple limite le conteneur limited_cpu_container
à utiliser un maximum de 1.5 CPU
.
docker run -d --name limited_cpu_container --cpus="1.5" nginx
3. Limite sur le temps d'utilisation du CPU
(--cpu-quota
et --cpu-period
)
Les paramètres --cpu-quota
et --cpu-period
permettent de configurer plus précisément l'utilisation du CPU
. --cpu-period
définit un intervalle de temps en microsecondes (par défaut 100000), et --cpu-quota
définit le temps maximum d'utilisation du CPU
sur cette période.
Exemple d'utilisation :
Dans cet exemple, le conteneur custom_cpu_quota_container
utilisera au maximum 50% du CPU
(25000/50000).
docker run -d --name custom_cpu_quota_container --cpu-period=50000 --cpu-quota=25000 nginx
6.3 Limites pour l'utilisation de la mémoire
La limitation de la mémoire permet de gérer la quantité de mémoire vive qu'un conteneur peut utiliser. Cela aide à éviter une situation où un conteneur commence à "manger" toute la mémoire, impactant les autres processus et conteneurs.
1. Limitation de la quantité maximale de mémoire (--memory)
Le paramètre --memory
définit le plafond supérieur de mémoire qu'un conteneur peut utiliser. Si le conteneur dépasse cette limite, le système le terminera.
Exemple d'utilisation :
Cet exemple limite le conteneur limited_memory_container
à n'utiliser pas plus de 512 MB de mémoire vive.
docker run -d --name limited_memory_container --memory="512m" nginx
2. Limitation de la mémoire de swap (--memory-swap)
Le paramètre --memory-swap
définit la limite totale pour la mémoire vive et la swap. Par exemple, si --memory
est défini à 512 MB et --memory-swap
à 1 GB, le conteneur pourra utiliser jusqu'à 512 MB de mémoire vive et 512 MB de swap supplémentaires.
Exemple d'utilisation :
Cet exemple limite le conteneur swap_limited_container
à utiliser 512 MB de mémoire vive et 512 MB de swap.
docker run -d --name swap_limited_container --memory="512m" --memory-swap="1g" nginx
3. Limitation de l'utilisation de la mémoire sans swap (--memory-swap=-1)
Pour interdire l'utilisation de swap, définissez le paramètre --memory-swap
à -1.
Exemple d'utilisation :
Cet exemple limite le conteneur no_swap_container
à 512 MB de mémoire vive sans possibilité d'utiliser le swap.
docker run -d --name no_swap_container --memory="512m" --memory-swap="-1" nginx
6.4 Scénarios pratiques
1. Lancement de tâches prioritaires et de basse priorité
Si un serveur exécute à la fois des tâches importantes et secondaires, le paramètre --cpu-shares
aide à répartir les ressources de manière à ce que les tâches critiques obtiennent plus de CPU
.
docker run -d --name high_priority_task --cpu-shares=2048 my_high_priority_image
docker run -d --name low_priority_task --cpu-shares=512 my_low_priority_image
2. Limitation des ressources pour les tests
Pour tester des applications dans des conditions de ressources limitées, on peut définir des limites strictes pour le CPU
et la mémoire. Cela aide à comprendre comment l'application fonctionnera avec ces restrictions.
docker run -d --name test_container --cpus="1" --memory="256m" my_test_image
3. Protection contre l'épuisement des ressources
Pour éviter qu'un conteneur n'utilise toutes les ressources disponibles du système, on peut définir des limites pour la mémoire et le CPU
de tous les conteneurs.
docker run -d --name isolated_container --cpus="2" --memory="1g" my_app_image
GO TO FULL VERSION