複数のプロセスを生成するDockerコンテナー内でマルチプロセッシングサービスを実行しているとしましょう。Dockerはホストのすべて/複数のコア/ CPUを使用するのですか、それとも1つだけですか?
複数のプロセスを生成するDockerコンテナー内でマルチプロセッシングサービスを実行しているとしましょう。Dockerはホストのすべて/複数のコア/ CPUを使用するのですか、それとも1つだけですか?
回答:
Charlesが述べているように、デフォルトではすべてを使用できますが、--cpuset-cpus
パラメータを使用してコンテナごとに制限することもできます。
docker run --cpuset-cpus="0-2" myapp:latest
これにより、コンテナーは3つのCPU(0、1、および2)に制限されます。詳細については、docker runのドキュメントをご覧ください。
コンテナーのCPU使用率を制限するための推奨される方法は、CPUの部分的な制限です。
docker run --cpus 2.5 myapp:latest
これにより、コンテナーがホスト上の2.5コアに制限されます。
最後に、Docker for Mac、Docker for Windows、docker-machineなどのVM内でdockerを実行する場合、これらのVMのCPU制限はラップトップ自体とは異なります。DockerはそのVM内で実行され、VM自体に与えられたすべてのリソースを使用します。たとえば、Docker for Macの場合、次のメニューがあります。
多分あなたのホストVMはデフォルトで1つだけのコアを持っています。したがって、最初にVM cpu-countを増やし、次に--cpuset-cpusオプションを使用してdockerコアを増やす必要があります。次のコマンドを使用してdocker default 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
--cpuset-cpus
それを変更したいかどうかを確認してください。