Ma compréhension, basée sur le fait que Docker est basé sur LXC, est que les conteneurs Docker partagent diverses ressources de son système d'exploitation hôte. Ma préoccupation concerne les cœurs de processeur. Voici un scénario:
a) Donc, si j'exécute tous les conteneurs de docker sur cet hôte, consommera-t-il le processeur/les cœurs au besoin, comme s'ils étaient exécutés en tant qu'applications installées normales sur ce système d'exploitation hôte?
b) Le conteneur Docker consommera-t-il son propre processus et tout le traitement qui y est contenu sera-t-il collé au cœur de processeur du processus parent?
c) Comment puis-je spécifier un conteneur Docker pour utiliser un certain nombre de cœurs (4 par exemple). J'ai vu qu'il y a un drapeau -C qui peut pointer vers un identifiant de cœur, mais il semble qu'il n'y ait pas d'option pour spécifier le conteneur pour choisir N cœurs au hasard.
Actuellement, je ne pense pas que Docker offre ce niveau de granularité. Il ne spécifie pas combien de cœurs il alloue dans ses fichiers lxc.conf, donc vous obtiendrez potentiellement tous les cœurs pour chaque docker (ou peut-être 1, je ne suis pas sûr à 100% à ce sujet).
Cependant, vous pouvez modifier le fichier conf généré pour un conteneur donné et définir quelque chose comme
cpuset {
cpuset.cpus="0-3";
}
Il se pourrait que les choses aient changé dans les dernières (quelques) versions. De nos jours, vous pouvez contraindre votre conteneur Docker avec des paramètres pour docker run
: L'équivalent de la réponse actuelle dans la nouvelle version de docker est docker run ubuntu /bin/echo 'Hello world --cpuset-cpus="0-3"
Cependant, cela limitera le processus de docker à ces CPU, mais (veuillez me corriger si je me trompe), d'autres conteneurs pourraient également demander le même ensemble. Une meilleure façon possible serait d'utiliser des partages CPU.
Pour plus d'informations, voir https://docs.docker.com/engine/reference/run/
De la documentation Oracle:
To control a container's CPU usage, you can use the
--cpu-period and --cpu-quota options with the docker
create and docker run commands from version 1.7.0 of Docker onward.
The --cpu-quota option specifies the number of microseconds
that a container has access to CPU resources during a
period specified by --cpu-period.
As the default value of --cpu-period is 100000, setting the
value of --cpu-quota to 25000 limits a container to 25% of
the CPU resources. By default, a container can use all available CPU resources,
which corresponds to a --cpu-quota value of -1.
Donc, si j'exécute tous les conteneurs Docker sur cet hôte, consommera-t-il le CPU/les cœurs selon les besoins, comme s'ils étaient exécutés en tant qu'applications installées normales sur ce système d'exploitation hôte?
Oui.
Par défaut, l'accès de chaque conteneur aux cycles de processeur de la machine hôte est illimité. Vous pouvez définir diverses contraintes pour limiter l'accès d'un conteneur donné aux cycles de processeur de la machine hôte.
Le conteneur Docker consommera-t-il son propre processus et tout le traitement qu'il contient sera-t-il collé au cœur de processeur de ce processus parent?
Nan.
Docker utilise Completely Fair Scheduler pour partager les ressources CPU entre les conteneurs. Les conteneurs ont donc un accès configurable au CPU.
Comment puis-je spécifier un conteneur Docker pour utiliser un certain nombre de cœurs (4 par exemple). J'ai vu qu'il y a un drapeau -C qui peut pointer vers un identifiant de cœur, mais il semble qu'il n'y ait pas d'option pour spécifier le conteneur pour choisir N cœurs au hasard.
Il est plus deconfigurable. Il existe d'autres options de processeur dans Docker que vous pouvez combiner.
--cpus = Spécifiez la quantité de ressources CPU disponibles qu'un conteneur peut utiliser. Par exemple, si la machine hôte possède deux CPU et que vous définissez --cpus = "1.5", le conteneur est garanti au maximum un et demi des CPU.
--cpuset-cpus Limitez les processeurs ou cœurs spécifiques qu'un conteneur peut utiliser. Une liste séparée par des virgules ou une plage de processeurs séparés par des tirets qu'un conteneur peut utiliser si vous avez plusieurs processeurs. Le premier processeur est numéroté 0. Une valeur valide peut être 0 pour utiliser le premier, le deuxième, le troisième et le quatrième processeur) ou 1,3 (pour utiliser le deuxième et le quatrième processeur).
--- (Et plus ...