La gestion des ressources dans un serveur est primordiale, en plus de bien gérer les besoins, c’est aussi une façon de limiter les dégâts d’une cyberattaque. En déployant vos conteneurs, vous pouvez justement attribuer et limiter les ressources CPU et RAM.
Dans vos fichiers docker-compose, il est tout à fait possible de mettre des limites et des réservations de ressources pour un ou plusieurs conteneurs.
- réserver des ressources = attribuer / assurer un nombre de ressources précis.
- limiter des ressources = empêcher d’aller au-delà des ressources proposées
Ajouter ce bloc dans votre fichier docker-compose.yml, pour chaque service/conteneur que vous souhaitez :
services:
mon-service:
deploy:
resources:
limits:
cpus: "0.15"
memory: 128m
reservations:
cpus: "0.05"
memory: 64MVous avez par ailleurs plusieurs choix :
- mettre uniquement des limites
- mettre uniquement des réservations
- ajouter les deux (limites et réservations)
Les ressources mise en place via ce bloc sont restrictives, libre à vous d’affiner les options en fonction de votre situation et des besoins.
Les limites “CPU” concernent l’allocation de processeur (cpu-ception). En bref, il s’agit de définir la quantité de ressource CPU qu’un conteneur peut prendre. cpus: '0.15' comme dans l’exemple stipule qu’un conteneur peut prendre au maximum 15% de ressources d’un seul CPU de la machine hôte.
D’autres options existent, vis-à-vis du scheduling processor (ordonnancement) ou encore la quantité de cycle alloué… En soit, je laisse faire les processeurs et les OS qui seront bien meilleurs que moi dans ces affinités.
Enfin, lorsque votre fichier .yml est prêt, vous pourrez lancer la commande suivante pour démarrer vos conteneurs :
docker compose up -dNote : Depuis Docker compose v2, le bloc
deploy.resourcesest pris en charge nativement sans l’option--compatibility. Si vous utilisez encore Docker Compose v1, l’option--compatibilityreste nécessaire.
En lançant la commande docker stats, vous verrez tous vos conteneurs avec notamment leurs ressources utilisées en temps réel - la colonne “Memory” affichera les valeurs imposées dans votre fichier docker-compose quant aux limites et réservations de mémoire - vous n’aurez pas d’informations concernant les limitations et réservations côté CPU cependant…