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

120

Disons que j'exécute un service multitraitement dans un conteneur docker engendrant plusieurs processus, est-ce que docker utiliserait tous / plusieurs cœurs / processeurs de l'hôte ou juste un?

kev
la source
11
Il est permis d'utiliser autant de processeurs que le groupe de contrôle dans lequel il se trouve. Ce qui, par défaut, n'est pas limité. Voyez --cpuset-cpussi vous vouliez changer cela.
Charles Duffy
3
(Un conteneur de docker n'est qu'un tas d'espaces de noms privés - puisqu'il n'émule pas les processeurs, il devrait faire tout son possible pour leur imposer des restrictions; les noyaux Linux fournissent des installations pour permettre une telle sortie. un chemin, mais c'est toujours quelque chose qui doit être exécuté explicitement).
Charles Duffy
Qu'en est-il de Docker Toolbox sur Windows, qui utilise VirtualBox?
Egor Kraev

Réponses:

111

Comme Charles le mentionne, par défaut, tout peut être utilisé, ou vous pouvez le limiter par conteneur en utilisant le --cpuset-cpusparamètre.

docker run --cpuset-cpus="0-2" myapp:latest

Cela limiterait le conteneur à 3 processeurs (0, 1 et 2). Consultez la documentation d'exécution du docker pour plus de détails.


La meilleure façon de limiter l'utilisation du processeur des conteneurs est avec 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 à l'intérieur d'une machine virtuelle, y compris Docker pour Mac, Docker pour Windows et docker-machine, ces machines virtuelles auront une limite de processeur distincte de votre ordinateur portable lui-même. Docker s'exécute à l'intérieur de cette VM et utilisera toutes les ressources données à la VM elle-même. Par exemple, avec Docker pour Mac, vous avez le menu suivant:

Paramètres avancés de Docker pour Mac

BMitch
la source
Deux conteneurs Docker s'exécutant sur la même machine virtuelle avec 2 processeurs affecteront-ils les performances s'ils sont tous deux des processus de génération? Donc, les deux génèrent deux processus pour un total de quatre alors qu'il n'y a que 2 processeurs sur la machine virtuelle?
cocoPuffs
@cocoPuffs sauf si vous spécifiez des limites de processeur, c'est la même chose que si vous exécutez ces processus en dehors d'un conteneur sur le même hôte. L'ajout de limites de processeur à chaque conteneur peut empêcher les processus d'un même conteneur d'utiliser toutes les ressources de processeur pour lui-même.
BMitch
Vraiment complet, super truc
Darragh Enright
7

Peut-être que votre VM hôte n'a qu'un seul cœur par défaut. Par conséquent, vous devez d'abord augmenter le nombre de processeurs de votre VM , puis utiliser l' option --cpuset-cpus pour augmenter vos cœurs de docker. Vous pouvez supprimer la machine virtuelle par défaut du docker à l'aide de la commande suivante, puis vous pouvez créer une autre machine virtuelle avec un nombre de processeurs et une taille de mémoire facultatifs :

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 à l'aide de cette commande:

nproc
arcsin
la source