web-dev-qa-db-fra.com

Combien de processeurs un conteneur Docker utilise-t-il?

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?

58
kev

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:

 Docker for Mac Advanced settings

60
BMitch

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
0
arcsin