DockerコンテナはCPUをいくつ使用しますか?


120

複数のプロセスを生成するDockerコンテナー内でマルチプロセッシングサービスを実行しているとしましょう。Dockerはホストのすべて/複数のコア/ CPUを使用するのですか、それとも1つだけですか?


11
含まれているcgroupと同じ数のCPUを使用できます。デフォルトでは、これは制限されていません。--cpuset-cpusそれを変更したいかどうかを確認してください。
Charles Duffy 2016年

3
(Dockerコンテナーは単なるプライベート名前空間の集まりです-CPUをエミュレートしていないため、制限を課すために邪魔にならないようにする必要があります。Linuxカーネルは、そのような外出を可能にする機能を提供します1つの方法ですが、それは実際に明示的に実行する必要があるものです)。
Charles Duffy

VirtualBoxを使用するWindows上のDocker Toolboxはどうですか?
Egor Kraev 2017

回答:


111

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の場合、次のメニューがあります。

Docker for Macの詳細設定


2つのCPUを備えた同じVMで実行されている2つのDockerコンテナーが両方ともプロセスを生成している場合、パフォーマンスに影響しますか?VMにCPUが2つしかない場合、両方が2つのプロセスを生成し、合計で4つになりますか?
cocoPuffs

@cocoPuffs CPU制限を指定しない限り、同じホスト上のコンテナーの外部でこれらのプロセスを実行する場合と同じです。各コンテナにCPU制限を追加すると、1つのコンテナ内のプロセスがそれ自体のCPUリソースをすべて使用できなくなる可能性があります。
BMitch

本当に包括的で素晴らしいもの
Darragh Enright

7

多分あなたのホスト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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.