Quantas CPUs um contêiner docker usa?


120

Vamos dizer que estou executando um serviço de multiprocessamento dentro de um contêiner docker gerando vários processos, o docker usaria todos / vários núcleos / CPUs do host ou apenas um?

Respostas:


111

Como Charles menciona, por padrão, todos podem ser usados ​​ou você pode limitá-los por contêiner usando o --cpuset-cpusparâmetro.

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

Isso restringiria o contêiner a 3 CPUs (0, 1 e 2). Consulte os documentos de execução do docker para obter mais detalhes.


A maneira preferida de limitar o uso de CPU de contêineres é com um limite fracionário em CPUs:

docker run --cpus 2.5 myapp:latest

Isso limitaria seu contêiner a 2,5 núcleos no host.


Por último, se você executar o docker dentro de uma VM, incluindo Docker para Mac, Docker para Windows e docker-machine, essas VMs terão um limite de CPU separado do próprio laptop. O Docker é executado dentro dessa VM e usará todos os recursos fornecidos à própria VM. Por exemplo, com Docker para Mac, você tem o seguinte menu:

Configurações avançadas do Docker para Mac


7

Talvez sua VM host tenha apenas um núcleo por padrão. Portanto, você deve aumentar a contagem de CPU da VM primeiro e, em seguida, usar a opção --cpuset-cpus para aumentar os núcleos do docker. Você pode remover a VM padrão do docker usando o seguinte comando e, em seguida, criar outra VM com contagem de CPU e tamanho de memória opcionais :

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

Após esta etapa, você pode especificar o número de núcleos antes de executar sua imagem. este comando usará 4 núcleos de um total de 8 núcleos.

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

Em seguida, você pode verificar o número de núcleos disponíveis em sua imagem usando este comando:

nproc
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.