Сколько процессоров использует контейнер докеров?

120

Допустим, я запускаю многопроцессорную службу внутри контейнера докеров, порождая несколько процессов, будет ли докер использовать все / несколько ядер / процессоров хоста или только один?

кэв
источник
11
Столько процессоров, сколько разрешено использовать контрольной группе. Что по умолчанию не ограничено. Посмотрите --cpuset-cpus, хотите ли вы это изменить.
Чарльз Даффи
3
(Контейнер докеров - это всего лишь набор частных пространств имен - поскольку он не эмулирует процессоры, ему нужно будет изо всех сил наложить на них какие-либо ограничения; ядра Linux предоставляют средства, позволяющие такой выход из строя. one-way, но это все еще то, что нужно явно выполнить).
Чарльз Даффи
Как насчет Docker Toolbox в Windows, который использует VirtualBox?
Егор Краев

Ответы:

111

Как упоминает Чарльз, по умолчанию можно использовать все, или вы можете ограничить его для каждого контейнера с помощью --cpuset-cpusпараметра.

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

Это ограничит контейнер 3 процессорами (0, 1 и 2). Дополнительные сведения см. В документации по запуску докеров .


Предпочтительный способ ограничения использования ЦП контейнерами - частичное ограничение ЦП:

docker run --cpus 2.5 myapp:latest

Это ограничит ваш контейнер 2,5 ядрами на хосте.


Наконец, если вы запустите докер внутри виртуальной машины, включая Docker для Mac, Docker для Windows и докер-машину, эти виртуальные машины будут иметь ограничение ЦП отдельно от самого ноутбука. Docker работает внутри этой виртуальной машины и будет использовать все ресурсы, предоставленные самой виртуальной машине. Например, с Docker для Mac у вас есть следующее меню:

Дополнительные настройки Docker для Mac

BMitch
источник
Могут ли два докер-контейнера, запущенные на одной виртуальной машине с двумя процессорами, влиять на производительность, если они оба являются порождающими процессами? То есть оба порождают два процесса, всего четыре, когда на виртуальной машине всего 2 процессора?
cocoPuffs
@cocoPuffs, если вы не укажете ограничения ЦП, это то же самое, как если бы вы запускали эти процессы вне контейнера на том же хосте. Добавление ограничений ЦП для каждого контейнера может помешать процессам в одном контейнере использовать все ресурсы ЦП для себя.
BMitch
Действительно всеобъемлющий, отличный материал
Дарра Энрайт,
7

Возможно, ваша виртуальная машина по умолчанию имеет только одно ядро. Поэтому вам следует сначала увеличить количество ЦП виртуальной машины, а затем использовать параметр --cpuset-cpus, чтобы увеличить количество ядер докеров . Вы можете удалить виртуальную машину docker по умолчанию, используя следующую команду, после чего вы можете создать другую виртуальную машину с дополнительным счетчиком процессоров и размером памяти . :

docker-machine rm default
docker-machine create -d virtualbox --virtualbox-cpu-count=8 --virtualbox-memory=4096 --virtualbox-disk-size=50000 default

После этого шага вы можете указать количество ядер перед запуском образа. эта команда будет использовать 4 ядра из 8 ядер.

docker run -it --cpuset-cpus="0-3" your_image_name

Затем вы можете проверить количество доступных ядер в вашем образе, используя эту команду:

nproc
агсзш
источник