ホスト上で割り当てられた RAM を Docker サービスが常にすべて使用しないようにするにはどうすればよいですか?

ホスト上で割り当てられた RAM を Docker サービスが常にすべて使用しないようにするにはどうすればよいですか?

Windows 10 の docker サービスは、割り当てが許可されている最大量のメモリを常使用しているようです。たとえば、[リソース] -> [詳細設定] セクションでメモリを 2 GB から 8 GB に増やし、[適用して再起動] をクリックすると、タスク マネージャーで次のようになりました。

ここに画像の説明を入力してください

メモリをすべて消費するのではなく、実行中のコンテナに必要な場合にのみ docker にメモリを使用させるにはどうすればよいですか?

現在コンテナは実行されておらず、サービスのみが実行中です。

答え1

Docker は完全なハードウェア仮想化とは異なりますが、多くの点で同じ方法で、同じ理由で機能します。

ハイパーバイザーは、指定された量のメモリを予約し、OS にメモリを要求しなくても、ハイパーバイザーとコンテナ (または仮想マシン) が必要なときにそのメモリを使用できるようにします。

あなたが設定した設定はまさにこの目的のためであり、まさにこの理由から、あなたが観察したとおりに動作します。これはバグではなく、動作を変更することは Docker の基本的な動作を書き換えることです。

つまり、何も壊れておらず、すべて正常に動作しています。

方法と理由をよりよく理解するために、Docker のメモリ予約について読むことを強くお勧めします。Docker は成熟した製品であり、十分に文書化されていると思います。

遭遇した問題を「解決」するには、メモリをさらにインストールするか、Docker メモリのニーズをより慎重に計画し、現在のように気まぐれにではなく、設計されたとおりにこの設定を使用します。

答え2

WSL2 バックエンドを使用して新しいバージョンの docker desktop を実行すると、この問題は解決されます。私自身もよく理解していないため、これ以上詳しくは説明できませんが、WSL2 をインストールしたところ、docker がメモリを動的に割り当てるようになったことに気付きました。

Docker Desktop は、WSL 2 の動的メモリ割り当て機能を使用して、リソースの消費を大幅に改善します。つまり、Docker Desktop は必要な量の CPU とメモリ リソースのみを使用し、コンテナーの構築など、CPU とメモリを大量に消費するタスクをより高速に実行できるようになります。

ソース:Docker デスクトップ WSL 2 バックエンド

関連情報