次の方法で共有


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 になります。