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?
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:
Como Charles menciona, por padrão, todos podem ser usados ou você pode limitá-los por contêiner usando o --cpuset-cpus
parâ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:
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