Docker 컨테이너는 몇 개의 CPU를 사용합니까?


120

여러 프로세스를 생성하는 도커 컨테이너 내 에서 다중 처리 서비스를 실행하고 있다고 가정 해 보겠습니다.도 커가 호스트의 모든 / 다중 코어 / CPU를 사용합니까, 아니면 하나만 사용합니까?


11
cgroup만큼 많은 CPU를 사용할 수 있습니다. 기본적으로 제한되지 않습니다. --cpuset-cpus변경하고 싶은지 확인 하십시오 .
찰스 더피

3
(A 고정 표시기 컨테이너는 개인 네임 스페이스의 단지 무리 - 그것은 CPU를 모방하지 않기 때문에, 그들에 대한 제한을 부과하는 그것의 방법의 나갈 필요가있을 것이다, 리눅스 커널하는 시설을 제공 할 수 같은 것 아웃 외를 하지만 실제로는 명시 적으로 수행해야하는 작업입니다.)
찰스 더피

VirtualBox를 사용하는 Windows의 Docker Toolbox는 어떻습니까?
Egor Kraev

답변:


111

Charles가 언급했듯이 기본적으로 모두 사용할 수 있거나 --cpuset-cpus매개 변수를 사용하여 컨테이너별로 제한 할 수 있습니다 .

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

그러면 컨테이너가 3 개의 CPU (0, 1, 2)로 제한됩니다. 자세한 내용은 Docker 실행 문서 를 참조하세요.


컨테이너의 CPU 사용량을 제한하는 선호되는 방법은 CPU에 대한 분수 제한을 사용하는 것입니다.

docker run --cpus 2.5 myapp:latest

그러면 컨테이너가 호스트의 2.5 코어로 제한됩니다.


마지막으로 Mac 용 Docker, Windows 용 Docker 및 docker-machine을 포함하여 VM 내부에서 docker를 실행하는 경우 해당 VM에는 랩톱 자체와 별도의 CPU 제한이 있습니다. Docker는 해당 VM 내부에서 실행되며 VM 자체에 제공된 모든 리소스를 사용합니다. 예를 들어 Mac 용 Docker를 사용하면 다음 메뉴가 있습니다.

Mac 용 Docker 고급 설정


CPU가 2 개인 동일한 VM에서 실행되는 두 개의 Docker 컨테이너가 둘 다 프로세스를 생성하는 경우 성능에 영향을 미칠까요? 그렇다면 둘 다 VM에 2 개의 CPU 만있을 때 총 4 개의 프로세스를 생성합니다.
cocoPuffs

CPU 제한을 지정하지 않는 한 @cocoPuffs는 ​​동일한 호스트의 컨테이너 외부에서 해당 프로세스를 실행하는 것과 동일합니다. 각 컨테이너에 CPU 제한을 추가하면 한 컨테이너의 프로세스가 자체적으로 모든 CPU 리소스를 사용하지 못하게 할 수 있습니다.
BMitch 2011

매우 포괄적이고 훌륭한 기능
Darragh Enright

7

호스트 VM에는 기본적으로 하나의 코어 만있을 수 있습니다. 따라서 먼저 VM cpu-count를 늘린 다음 --cpuset-cpus 옵션을 사용 하여 docker 코어를 늘려야합니다. 다음 명령을 사용하여 docker 기본 VM을 제거한 다음 선택적 cpu-count메모리 크기를 사용하여 다른 VM을 만들 수 있습니다 . :

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

이 단계 후에 이미지를 실행하기 전에 코어 수를 지정할 수 있습니다. 이 명령은 총 8 개의 코어 중 4 개의 코어를 사용합니다.

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

그런 다음 다음 명령을 사용하여 이미지에서 사용 가능한 코어 수를 확인할 수 있습니다.

nproc
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.