Ile procesorów używa kontener platformy Docker?

120

Załóżmy, że uruchamiam usługę wieloprocesorową w kontenerze docker, który uruchamia wiele procesów, czy docker używa wszystkich / wielu rdzeni / procesorów hosta, czy tylko jednego?

kev
źródło
11
Można używać tylu procesorów, ile cgroup, w której się znajduje. Który domyślnie nie jest ograniczony. Zobacz, --cpuset-cpusczy chcesz to zmienić.
Charles Duffy,
3
(Kontener dockera to tylko zbiór prywatnych przestrzeni nazw - ponieważ nie emuluje procesorów, musiałby zrobić wszystko, co w jego mocy, aby nałożyć na nie jakiekolwiek ograniczenia; Jądra Linuksa zapewniają narzędzia umożliwiające takie wyjście z swoją drogą, ale to wciąż coś, co musi być faktycznie wykonane).
Charles Duffy,
A co z Docker Toolbox w systemie Windows, który używa VirtualBox?
Egor Kraev

Odpowiedzi:

111

Jak wspomina Charles, domyślnie można użyć all lub możesz ograniczyć to do kontenera za pomocą --cpuset-cpusparametru.

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

To ograniczyłoby kontener do 3 procesorów (0, 1 i 2). Zobacz dokumentację docker run, aby uzyskać więcej informacji.


Preferowanym sposobem ograniczenia wykorzystania procesora przez kontenery jest ułamkowy limit liczby procesorów:

docker run --cpus 2.5 myapp:latest

To ograniczyłoby twój kontener do 2,5 rdzeni na hoście.


Na koniec, jeśli uruchomisz docker wewnątrz maszyny wirtualnej, w tym Docker for Mac, Docker for Windows i docker-machine, te maszyny wirtualne będą miały limit procesora oddzielony od samego laptopa. Docker działa wewnątrz tej maszyny wirtualnej i wykorzysta wszystkie zasoby przekazane samej maszynie wirtualnej. Np. Z Dockerem na Maca masz następujące menu:

Ustawienia zaawansowane platformy Docker dla komputerów Mac

BMitch
źródło
Czy dwa kontenery docker działające na tej samej maszynie wirtualnej z 2 procesorami wpłyną na wydajność, jeśli oba są procesami tworzenia? Czyli oba generują dwa procesy w sumie cztery, gdy na maszynie wirtualnej są tylko 2 procesory?
cocoPuffs
@cocoPuffs, chyba że określisz limity procesora, jest tak samo, jak w przypadku uruchamiania tych procesów poza kontenerem na tym samym hoście. Dodanie limitów procesora do każdego kontenera może uniemożliwić procesom w jednym kontenerze wykorzystanie wszystkich zasobów procesora.
BMitch
Naprawdę kompleksowe, świetne rzeczy
Darragh Enright
7

Być może Twoja maszyna wirtualna hosta ma domyślnie tylko jeden rdzeń. Dlatego należy najpierw zwiększyć liczbę procesorów VM, a następnie użyć opcji --cpuset-cpus , aby zwiększyć liczbę rdzeni dockera . Możesz usunąć domyślną maszynę wirtualną Dockera za pomocą następującego polecenia, a następnie możesz utworzyć inną maszynę wirtualną z opcjonalną liczbą procesorów i rozmiarem pamięci . :

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

Po tym kroku możesz określić liczbę rdzeni przed uruchomieniem obrazu. to polecenie użyje 4 rdzeni z łącznie 8 rdzeni.

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

Następnie możesz sprawdzić liczbę dostępnych rdzeni na swoim obrazie za pomocą tego polecenia:

nproc
arcsin
źródło