概要
Dockerを使った後container images を削除したのにディスク容量が減らないということが起きまし。色んな記事を見ていく中でwsl2が原因というものが多く見受けられました。ボクもそれで苦しんでいたので共有します。
簡単な説明
WSL2では.vhdxファイルという仮想のハードディスクファイルを使用してデータを保存しています。つまりこのファイルを小さくできないかという話です。
イメージとしては.vhdxがペットボトルで中のデータが水だとすると水は飲み干して空っぽなのにペットボトルの空が容量を圧迫しているわけですね。
解決策
1.wsl2の停止
wsl2の状態を確認した後に稼働していれば停止します。
#wslの状態確認
wsl -l -v
#wslを停止
wsl --shutdown
2. wsl2の仮想ディスクのパスを特定
ボクの場合 C:\Users{ユーザー名}\AppData\Local\Docker にありました。windows環境によって違いますが、他に見た記事だと C:\Users\{ユーザー名}\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu_xxxxxxx\LocalState\ext4.vhdx
の場合もあるようです!
警告
記事やお使いの環境によってはコマンドプロンプトが管理者として実行するかしないかでエラーが出たりでなかったりするのでうまくいかなかったら両方試してみてね
3 .vhdxファイルの最適化
Optimize-VHD -Path <1で特定した.vhdxファイルのパス> -Mode Full
環境によってはOptimize-VHDが効かないこともあるようです(ボクは効きませんでした)そんな時は4をお試しください
4.Optimize-VHDが効かない時
diskpartで最適化をします。以下が手順です。
#diskpartに移動
diskpart
# さっき見つけたvhdxを指定
select vdisk file="<1で特定した.vhdxファイルのパス>"
# 開く
attach vdisk readonly
# 最適化する
compact vdisk
# 接続を切る
detach vdisk
終わり
データサイエンスの環境構築をする中でDockerでつまずいたことがあったので君たちの役に立てばと思い投稿してみました。
これからもよろしく!応援しています。