docker image prune したのにディスク空き容量が変わらない
はじめに
Dockerを長く使っているとディスク容量を消費し空き容量がなくなって来る事がよくあります。自分は仮想ディスクをDドライブに移しているのですが、それでも圧迫して来たので仮想ディスクの掃除をした時の話。
環境
- Docker Desktop for Windows
- Windows10 Home(Proの場合の方法もあり)
現象
以下のコマンドで使っていないイメージを削除したのに、ディスクの空き容量が増えない。
# 使っていないイメージ削除 $ docker image prune
その他のオブジェクト削除コマンド
以下のコマンド実行時も同じ
# 使っていないコンテナ削除 $ docker container prune # 使っていないボリューム削除 $ docker volume prune # 使っていないネットワーク削除 $ docker network prune # ボリューム以外の使っていないすべてのオブジェクト削除 $ docker system prune
原因
Dockerが使用している仮想ディスクは、拡張は自動的に行うが縮小は行われない。つまり増えたら増えたままなのでディスクを圧迫し続ける。
prune
コマンドでそのオブジェクトがDocker内で削除されても、使われていたディスクスペースは空の状態で確保されたままとなる。もちろん再利用はされるのでそのままでも問題はないが、今回はそのスペースを圧縮したい。
解決方法
Dockerからは離れてWindowsのシステムコマンドを使って仮想ディスクを圧縮していきます。
Docker が使用している仮想ディスク(ファイル)に対して、圧縮コマンドを実行する事で、使用されていないディスクスペースを削除する事ができます。
Windows10 Pro か Windows10 Home かでコマンドが違うので注意。
手順
1. Docker Desktop for Windows を終了
2. WSLを停止
PowerShell を使って以下のコマンドを実行します。
wsl --shutdown
3. 仮想ディスクを圧縮
仮想ディスクの場所を確認します。環境によって違うのでそれぞれ調べてください。仮想ディスクのファイル名はext4.vhdx
です。仮想ディスクのフルパスをメモっておきます。
例えば
C:\Users\[ユーザー名]\AppData\Local\Docker\wsl\distro\ext4.vhdx
以下、Windowsエディションによって方法が違います。
Windows10 Pro の場合
以下のコマンドを実行します。
Optimize-VHD -Path [仮想ディスクのフルパス]\ext4.vhdx
Windows10 Home の場合
Homeエディションの場合は、Hyper-VのコマンドであるOptimize-VHD
は使えないので、代わりに DISKPART を使って圧縮します。
以下のコマンドで、DISKPART に入り、以下 DISKPART 上でコマンド実行します。
diskpart
DISKPART 内にて
# 仮想ディスクファイルの選択 DISKPART> select vdisk file="[仮想ディスクのフルパス]\ext4.vhdx" # 圧縮 DISKPART> compact vdisk DISKPART> exit
まとめ
これらの操作は仮想ディスクに対して実行されるため、バックアップをとってから実行するなど慎重にする必要があります。Dockerが起動しなくなるなどの不具合が起きる場合もあるため、あくまでも自己責任でお願いします^^
-
前の記事
【Docker】client_max_body_sizeが効かない時 2022.02.07
-
次の記事
ngrokをdocker composeで使う 2024.01.05
コメントを書く