やりたいこと
WindowsのDockerやRancherDesktopで使用するvhdxファイルのサイズを小さくしたい。
コンテナイメージをたくさん作成したり、コンテナのストレージサイズを消費したりすると、vhdxファイルが大きくなる。その後にイメージを削除、ストレージを削除してもvhdxファイルは小さくならないそうな。
あちこち調べて試しても縮小できなかったが、集めた情報を組み合わせたら縮小できた。おそらく確実に縮小できる手順がこちら。
手順
- (Windowsで実行)不要なイメージを削除する。
-
docker rmi
で普通に削除する。
-
- (コンテナで実行)コンテナ内の不要ファイルを削除し、ストレージ使用量を小さくする。
- (コンテナで実行)ゼロ埋めファイルを作成して削除する。サイズはcountで指定する(下記例だと40GB)。指定するサイズはこれぐらい減らせるはず、という数字を指定する。
sudo dd if=/dev/zero of=zero bs=1M count=40960
sudo rm zero
- (Windowsで実行)コンテナおよびDockerを停止する。
- (Windowsで実行)PowerShellを管理者モードで開き、以下を実行する。パスはRancherDesktopの例。
wsl --shutdown
cd C:\Users\xxxxx\AppData\Local\rancher-desktop\distro-data
Optimize-VHD -Path ext4.vhdx -Mode Full
あまり縮小されない場合は、ゼロ埋めファイル作成以降を再度実行すると縮小される。私の場合は65GBから35GBに減らすことができた。コンテナが複数ある場合は、それぞれのコンテナで上記を実行すると良いかもしれない。