Disons que j'exécute un service multitraitement dans un conteneur docker générant plusieurs processus. Docker utiliserait-il/plusieurs cœurs/processeurs de l'hôte ou un seul?
Comme Charles le mentionne, par défaut, tout peut être utilisé ou vous pouvez le limiter par conteneur à l'aide du paramètre --cpuset-cpus
.
docker run --cpuset-cpus="0-2" myapp:latest
Cela limiterait le conteneur à 3 CPU (0, 1 et 2). Voir le docker run docs pour plus de détails.
Le moyen préféré de limiter l’utilisation de processeurs par les conteneurs est une limite fractionnaire sur les processeurs:
docker run --cpus 2.5 myapp:latest
Cela limiterait votre conteneur à 2,5 cœurs sur l'hôte.
Enfin, si vous exécutez Docker dans une machine virtuelle, y compris Docker pour Mac, Docker pour Windows et Docker-Machine, ces machines virtuelles auront une limite de CPU distincte de votre ordinateur portable lui-même. Docker s'exécute à l'intérieur de cette VM et utilisera toutes les ressources attribuées à la VM elle-même. Par exemple. avec Docker pour Mac vous avez le menu suivant:
Peut-être que votre hôte VM ne possède qu'un seul noyau par défaut. Par conséquent, vous devez d'abord augmenter votre VM cpu-count puis utiliser--cpuset-cpuspour augmenter le nombre de cœurs de votre menu fixe. Vous pouvez supprimer le menu fixe par défaut VM à l’aide de la commande suivante, puis créer un autre VM avec le paramètre facultatif cpu-count et memory size .:
docker-machine rm default
docker-machine create -d virtualbox --virtualbox-cpu-count=8 --virtualbox-memory=4096 --virtualbox-disk-size=50000 default
Après cette étape, vous pouvez spécifier le nombre de cœurs avant d'exécuter votre image. Cette commande utilisera 4 cœurs sur un total de 8 cœurs.
docker run -it --cpuset-cpus="0-3" your_image_name
Ensuite, vous pouvez vérifier le nombre de cœurs disponibles dans votre image en utilisant cette commande:
nproc