Docker Desktop 環境でコンテナを動かしていますが、実メモリよりも少ない環境で動いているので、メモリの割当を増やせるかどうかを試してみました。WSL 2 backend を使用している環境に限定の話。
概要
Docker Desktop は WSL2 のメモリ制限に影響を受けます。Windows10のデフォルトだと WSL2 に割り当てられるメモリは ホスト側のメモリの80%となるようです。手元の環境を確認したところでは、以下のようになっていました。
ホストPCのメモリ | WSLのメモリ |
Windows10 64GB | 50GB |
Windows10 128GB | 100GB |
Windows11 16GB | 8GB |
WSLのUbuntuでメモリ容量を確認するとこんな感じ。(Win10 64GB RAMの環境)
~$ free
total used free shared buff/cache available
Mem: 52496528 110552 52281920 68 104056 51956912
Swap: 13631488 0 13631488
WSL2のメモリを増やせば、Docker Desktopに割り当てできるメモリも増やせるということになります。
試した環境
Windows 10 Pro (21H2)
OSビルド: 19044.1741
実装RAM: 64.0GB
Docker Desktop 4.8.2 (79419) WSL 2 backend
設定方法
Docker Desktop をWSL2環境で動かしている場合、設定画面には以下のように、リソースは Windows側の管理ですと表示されます。
具体的には .wslconfig というファイルを作成し、そこに設定を書いていくことになります。
.wslconfig
ディレクトリに格納 %UserProfile% されます。
WSL 2 バージョンとして実行されているインストール済み Linux ディストリビューション全体で設定をグローバルに構成するために使用されます。
WSL 2 によって実行されるディストリビューションにのみ使用できます。 WSL 1 として実行されているディストリビューションは、仮想マシンとして実行されていないので、この構成の影響を受け取る必要があります。
%UserProfile% ディレクトリに移動するには、PowerShell で cd ~ を使用してホーム ディレクトリ (通常は、それがユーザー プロファイル C:\Users\<UserName> です) にアクセスするか、Windows エクスプローラーを開き、アドレス バーに「%UserProfile%」と入力します。 ディレクトリ パスは、 のように表示されます C:\Users\<UserName>\.wslconfig。
引用元: https://docs.microsoft.com/ja-jp/windows/wsl/wsl-config#wslconfig
WSLのディストリビューションごとにメモリ制限をしたい場合は、各ディストリビューションの/etc/wsl.conf に設定を行えばよいみたいです。(未検証)
設定内容
こんな感じで.wslconfigファイルに設定を記載します。swapも使わないように設定しました。
[wsl2]
memory=60GB
swap=0
メモリ容量を減らし、CPUリソースを制限するような設定も可能です。
[wsl2]
memory=16GB
processors=4
swap=0
設定反映
Windowsを再起動すれば設定は反映されますが、WSLのシャットダウン→起動 でも反映されます。念のため、Docker Desktop を終了させてから、WSLをシャットダウンします。
>wsl --shutdown
シャットダウン後にもう一度 WSLのUbuntuのにアクセスし、メモリ容量を確認してみると、設定が反映されていることを確認できます。
~$ free
total used free shared buff/cache available
Mem: 61726860 107372 61550672 68 68816 61153544
Swap: 0 0 0
少しでも多く Docker Desktop に場合には試してみると良いかもしれません。
コメント