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


120

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


11
Дозволено використовувати стільки процесорів, скільки група, в якій знаходиться. Що за замовчуванням не обмежене. Подивіться, --cpuset-cpusчи хотіли ви це змінити.
Чарльз Даффі

3
(Контейнер докера - це лише купа приватних просторів імен - оскільки він не імітує процесори, йому потрібно буде вийти зі свого шляху, щоб накласти на них будь-які обмеження; ядра Linux надають засоби, що дозволяють таким виходу з-за- односторонній, але це все-таки щось, що насправді потрібно чітко виконувати).
Чарльз Даффі

Як щодо Docker Toolbox в Windows, який використовує VirtualBox?
Єгор Краєв

Відповіді:


111

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

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

Це обмежило б контейнер трьома процесорами (0, 1 і 2). Докладніші відомості див. У програмах для запуску докерів .


Кращим способом обмеження використання CPU контейнерів є дробовий ліміт на процесори:

docker run --cpus 2.5 myapp:latest

Це обмежує ваш контейнер до 2,5 ядер на хості.


Нарешті, якщо ви запускаєте докер всередині VM, включаючи Docker для Mac, Docker для Windows та докер-машину, ці VM матимуть обмеження процесора окремо від вашого ноутбука. Docker працює всередині цього ВМ і використовуватиме всі ресурси, надані самому ВМ. Наприклад, з Docker для Mac у вас є таке меню:

Налаштування Docker для Mac


Чи впливатиме два докерних контейнери на одній ВМ з двома процесорами, якщо вони обидва нерестують процес? Отже, обидва породжують два процеси в цілому чотири, коли на ВМ є лише 2 ЦП?
cocoPuffs

@cocoPuffs, якщо ви не вказали ліміти процесора, це те саме, що якщо ви запускаєте ці процеси поза контейнером на тому ж хості. Додавання лімітів CPU до кожного контейнера може перешкоджати процесам в одному контейнері використовувати всі ресурси CPU для себе.
BMitch

Дійсно всебічно, чудові речі
Дарраг Енрайт

7

Можливо, у вашого VM хостингу за замовчуванням є лише одне ядро. Тому слід спочатку збільшити свій VM- процесор, а потім скористатися опцією --cpuset-cpus для збільшення своїх докерних ядер. Ви можете видалити VM за замовчуванням докера за допомогою наступної команди, тоді ви можете створити інший VM з додатковим процесором і розміром пам'яті.

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.