Windows コンテナーのリソース コントロールの実装
適用対象: Windows Server 2025、Windows Server 2022、Windows Server 2019
コンテナーごとおよびリソースごとに実装できるリソース制御がいくつかあります。 既定では、コンテナーの実行は一般的な Windows リソース管理の対象となります。一般的には公平な共有ベースですが、これらの構成では開発者または管理者がリソースの使用を制限または影響を与えることができます。 制御できるリソースには、CPU/プロセッサ、メモリ/RAM、ディスク/ストレージ、ネットワーク/スループットなどがあります。
Windows コンテナーでは、ジョブ オブジェクト を使用して、各コンテナーに関連付けられているプロセスをグループ化して追跡します。 リソース コントロールは、コンテナーに関連付けられている親ジョブ オブジェクトに実装されます。
Hyper-V 分離 リソース制御が仮想マシンと仮想マシン内で実行されているコンテナーのジョブ オブジェクトの両方に自動的に適用される場合、これにより、コンテナー内で実行されているプロセスがバイパスまたはエスケープされた場合でも、ジョブ オブジェクトが制御する仮想マシンは、定義されたリソースコントロールを超えることができません。
リソース
各リソースについて、このセクションでは、Docker コマンド ライン インターフェイス間のマッピングを、対応する Windows ホスト コンピューティング サービス (HCS) API に対するリソース コントロールの使用方法 (オーケストレーターまたはその他のツールによって構成される可能性があります) と、一般的に Windows によってリソース コントロールがどのように実装されているかを示します (この説明は概要であり、基になる実装は変更される可能性があることに注意してください)。
記憶
資源 | 場所 |
---|---|
Docker インターフェイス | --memory |
HCS インターフェイス | MemoryMaximumInMB |
共有カーネル | JOB_OBJECT_LIMIT_JOB_MEMORY |
Hyper-V 分離 | 仮想マシン のメモリ |
手記
Windows Server 2016 での Hyper-V 分離の場合、メモリ上限を使用すると、コンテナーが最初にメモリの上限量を割り当ててから、コンテナー ホストに戻り始めることがわかります。 新しいバージョンの Windows Server (1709 以降) では、このプロセスが最適化されています。
CPU (カウント)
資源 | 場所 |
---|---|
Docker インターフェイス | --cpus |
HCS インターフェイス | ProcessorCount |
共有カーネル | JOB_OBJECT_CPU_RATE_CONTROL_HARD_CAP* でシミュレート |
Hyper-V 分離 | 公開されている仮想プロセッサの数 |
CPU (パーセント)
資源 | 場所 |
---|---|
Docker インターフェイス | --cpu-percent |
HCS インターフェイス | ProcessorMaximum |
共有カーネル | JOB_OBJECT_CPU_RATE_CONTROL_HARD_CAP |
Hyper-V 分離 | 仮想プロセッサでのハイパーバイザーの制限 |
CPU (共有)
資源 | 場所 |
---|---|
Docker インターフェイス | --cpu-shares |
HCS インターフェイス | ProcessorWeight |
共有カーネル | JOB_OBJECT_CPU_RATE_CONTROL_WEIGHT_BASED |
Hyper-V 分離 | ハイパーバイザー仮想プロセッサの重み |
ストレージ (画像)
資源 | 場所 |
---|---|
Docker インターフェイス | --io-maxbandwidth/--io-maxiops |
HCS インターフェイス | StorageIOPSMaximum および StorageBandwidthMaximum |
共有カーネル | JOBOBJECT_IO_RATE_CONTROL_INFORMATION |
Hyper-V 分離 | JOBOBJECT_IO_RATE_CONTROL_INFORMATION |
ストレージ (ボリューム)
資源 | 場所 |
---|---|
Docker インターフェイス | --storage-opt size= |
HCS インターフェイス | StorageSandboxSize |
共有カーネル | JOBOBJECT_IO_RATE_CONTROL_INFORMATION |
Hyper-V 分離 | JOBOBJECT_IO_RATE_CONTROL_INFORMATION |
その他の注意事項または詳細
メモリ要件
Windows コンテナーは、通常、ユーザー管理、ネットワークなどのコンテナーごとの機能を提供するシステム プロセスを各コンテナーで実行します。 これらのプロセスに必要なメモリの多くはコンテナー間で共有されますが、メモリ上限は十分に高くする必要があります。 システム要件に関するドキュメントに、各基本イメージのタイプと Hyper-V による分離の有無に応じた表が示されています。
CPU 共有 (Hyper-V 分離なし)
CPU 共有を使用する場合、基になる実装 (Hyper-V 分離を使用しない場合) は、JOBOBJECT_CPU_RATE_CONTROL_INFORMATIONを構成します。具体的には、コントロール フラグをJOB_OBJECT_CPU_RATE_CONTROL_WEIGHT_BASEDに設定し、適切な重みを指定します。 ジョブ オブジェクトの有効な重みの範囲は 1 ~ 9 で、既定値は 5 で、ホスト コンピューティング サービスの値 1 から 10000 よりも忠実度が低くなります。 たとえば、共有の重みが 7500 の場合は重みが 7、共有の重みが 2500 の場合は値が 2 になります。