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 :
---
deploy:
resources:
limits:
cpus: '0.15'
memory: 128m
reservations:
cpus: '0.05'
memory: 64M
Vous 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 proccesseur (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 docker-compose --compatibility up -d
pour démarrer vos conteneurs. --compatibility
permet de lancer les conteneurs malgré l'avertissement de docker, vous spécifiant que le bloc "deploy: ressources:" est à exploiter plutôt dans un docker-swarm que dans un hôte docker tout seul.
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...