Docker 不要なファイルを削除して WSL 内のディスク容量を減らす
調子こいて Docker image 作りまくってたら、ドライブの容量が足りなくなってしまったので、WSL 内に構築した Docker 環境の不要なイメージの削除することにしました。
また、WSL 内の容量を減らすだけでは親の Windows のドライブ容量が減るわけではないみたいだったので、そちらについても調べたことをまとめます。
Docker がどのくらい容量を使っているか
WSL 内で以下のコマンドを実行することで、ディスク容量を確認することができます。
docker system df
こんな感じのレスポンスが得られます。
この例だと 60 GB 強使ってます
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 21 12 23.03GB 13.58GB (58%)
Containers 12 1 18.44MB 18.44MB (99%)
Local Volumes 23 3 1.128GB 956.7MB (84%)
Build Cache 861 0 47.8GB 47.8GB
削除方法
先ほど実行した例では、Images で約 23 GB, Local Volumes で約 1 GB, Build Cache で 約 48 GB 使用していたので、順番に不要なものを削除していきます。
Images の削除
下記のコマンドで、タグを持たず、コンテナからも参照されないイメージを削除することができます。
docker image prune -a
docker image prune
のみでタグ付けしていない(<none>) イメージを削除することができますが、-a
オプションを付けることで、どのコンテナからも参照されていないイメージも含めることができます。
Volumes の削除
下記のコマンドで、どのコンテナからも参照されないボリュームを削除します。
docker volume prune
Build Cache の削除
ビルド途中のキャッシュは以下のコマンドで削除することができます。
docker builder prune
削除後の容量を確認する
上記のコマンドを実行してみてどのくらい容量の削減に成功したか確認します。
docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 12 12 12.6GB 1.095GB (8%)
Containers 12 1 18.44MB 18.44MB (99%)
Local Volumes 3 3 171.1MB 0B (0%)
Build Cache 70 0 0B 0B
60 GB 強から 13 GB 弱まで減らすことができました。
WSL2 のディスクサイズを最適化する
不要な Docker images やキャッシュを削除したことで、容量をかなり削減することができましたが、Windows 本体の容量に空きができるわけではありません。
削除前
削除後
なので、WSL にアタッチされている仮想ハードディスクの容量を減らす必要があります。
まずは、WSL をシャットダウンします。
wsl --shutdown
次にパーティション管理ツールである diskpart を起動します。
diskpart
diskpart が起動し、新しいウィンドウが開くので、仮想イメージファイルを選択し、容量を最適化します。
select vdisk file="C:\Users\{WSL の仮想ディスクイメージのパス}\ext4.vhdx"
attach vdisk readonly
compact vdisk
detach vdisk
exit
最後に、Windows のドライブの容量が増えていたらOKです
さいごに
prune は果物のプルーンという意味の他に余分なものを刈り取るという意味があるそうです。
公式の解説だと参照されていないもののことを宙ぶらりんとか表現してるからぷら~んみたいなことだと思ってしまった。勉強になりました。
参考
Discussion