Скажімо, я запускаю багатопроцесорну службу всередині докерного контейнера, що породжує декілька процесів, чи використовував би докер усі / кілька ядер / процесорів хоста або лише один?
Скажімо, я запускаю багатопроцесорну службу всередині докерного контейнера, що породжує декілька процесів, чи використовував би докер усі / кілька ядер / процесорів хоста або лише один?
Відповіді:
Як згадує Чарльз, за замовчуванням можна використовувати все, або ви можете обмежити його на контейнер, використовуючи --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 у вас є таке меню:
Можливо, у вашого 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
--cpuset-cpus
чи хотіли ви це змінити.