web-dev-qa-db-ja.com

DockerはホストオペレーティングシステムのCPUコアをどのように使用しますか?

DockerがLXCに基づいているという事実に基づく私の理解は、Dockerコンテナーがそのホストオペレーティングシステムからのさまざまなリソースを共有していることです。私の懸念はCPUコアです。シナリオは次のとおりです。

  • ホストLinux OSには8つのコアがあります
  • 上記のホストOSに一連のdockerコンテナーを展開する必要があります。
  • デプロイする必要があるドッカーコンテナのいくつかは、2つのコアを使用するのにより適しています

a)そのホストですべてのdockerコンテナを実行すると、ホストOSで通常のインストール済みアプリケーションとして実行されている場合のように、必要に応じてCPU /コアを消費しますか?

b)Dockerコンテナーは独自のプロセスを消費し、それに含まれるすべての処理はその親プロセスのCPUコアに固定されますか?

c)多数のコア(たとえば4)を使用するようにdockerコンテナーを指定するにはどうすればよいですか。コアIDを指すことができる-Cフラグがありましたが、N個のコアをランダムに選択するコンテナを指定するオプションがないようです。

41
gextra

現在、私はdockerがこのレベルの粒度を提供するとは思わない。 lxc.confファイルで割り当てるコアの数を指定していないため、各ドッカーのすべてのコアを取得する可能性があります(または、おそらく1、100%確実ではありません)。

ただし、特定のコンテナ用に生成されたconfファイルを微調整して、次のように設定できます。

cpuset {
    cpuset.cpus="0-3";
}
7
Oliver Matthews

最新の(いくつかの)バージョンで状況が変わった可能性があります。最近では、docker runのパラメーターを使用してdockerコンテナーを制約できます。新しいdockerバージョンの現在の回答に相当するのはdocker run ubuntu /bin/echo 'Hello world --cpuset-cpus="0-3"です。ただし、これはdockerプロセスをこれらのCPUに制限しますが、私が間違っている場合)他のコンテナも同じセットを要求できます。おそらくより良い方法は、CPUシェアを使用することです。

詳細については、 https://docs.docker.com/engine/reference/run/ を参照してください

6
DragonTux

Oracleのドキュメントから:

  To control a container's CPU usage, you can use the
  --cpu-period  and --cpu-quota options with the docker 
  create and docker run commands  from version 1.7.0 of Docker onward.

  The --cpu-quota option specifies the number of microseconds 
  that a container has access to CPU resources during a 
  period specified by --cpu-period.
  As the default value of --cpu-period is 100000, setting the 
  value of --cpu-quota to 25000 limits a container to 25% of 
  the CPU resources. By default, a container can use all available CPU resources, 
  which corresponds to a --cpu-quota value of -1.
4
Ijaz Ahmad Khan

そのホストですべてのdockerコンテナを実行すると、ホストOSで通常のインストール済みアプリケーションとして実行されている場合のように、必要に応じてCPU /コアを消費しますか?

はい。

[〜#〜] cpu [〜#〜]

デフォルトでは、各コンテナからホストマシンのCPUサイクルへのアクセスは無制限です。さまざまな制約を設定して、特定のコンテナのホストマシンのCPUサイクルへのアクセスを制限できます。


Dockerコンテナは独自のプロセスを消費し、それに含まれるすべての処理はその親プロセスのCPUコアに固定されますか?

いや。

DockerはCPUリソースをコンテナ間で共有するためにCompletely Fair Schedulerを使用します。したがって、コンテナはCPUへの設定可能なアクセス権を持っています。


多数のコア(たとえば4)を使用するようにdockerコンテナーを指定するにはどうすればよいですか。コアIDを指すことができる-Cフラグがありましたが、N個のコアをランダムに選択するコンテナを指定するオプションがないようです。

それは 以上設定可能。 Dockerには、組み合わせることができるCPUオプションがさらにあります。

--cpus =コンテナが使用できる使用可能なCPUリソースの量を指定します。たとえば、ホストマシンに2つのCPUがあり、-cpus = "1.5"を設定した場合、コンテナは最大で1.5のCPUしか保証されません。

--cpuset-cpusコンテナが使用できる特定のCPUまたはコアを制限します。複数のCPUがある場合、コンテナが使用できるコンマ区切りリストまたはハイフン区切りのCPU範囲。最初のCPUの番号は0です。有効な値は、0〜3(1番目、2番目、3番目、および4番目のCPUを使用)または1,3(2番目と4番目のCPUを使用)です。

その他...

2
I159