はじめに
WindowsでDocker Desktopを利用して開発を行う際、WSL2を利用して動作させることってよくありますよね
-
docker build
を継続して行っていると、DockerをインストールしているPCのC:ドライブの容量が圧迫され、容量が足りなくなった... -
docker image prune
docker builder prune
などDockerの不要ファイル削除コマンドがあるのは知っているが、何を行えばいいか分からない - 上記コマンドによって必要なファイルが削除されてしまうかどうかの判断ができない
そんな場合の対処法についてまとめてみました
【注意】記事の内容を実施する前に
私の環境下ではこの記事に記載の手順で対応可能であることが確認取れていますが、他の記事・Docker公式ドキュメントの参照などを行ったのち、あくまで自己責任での実施をお願いいたします
可能性は低いと思いますが、万が一、WSL2、Dockerが動作しなくなった場合は動作環境の再構築が必要になる可能性もあることをご理解いただいた上で実施いただければと思います
実施内容
容量圧縮処理でDISKPARTを利用するためWindowsではPowershellで操作してください
1. docker system df
でDockerが使用している容量の確認
PS C:\Windows\system32> docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 10 9 39.72GB 35.74GB (89%)
Containers 9 4 8.629GB 9.666MB (0%)
Local Volumes 1 1 1.081GB 0B (0%)
Build Cache 113 0 1.718GB 1.718GB
2. wslの停止
wsl --shutdown
3. DISKPART起動
diskpart
DISKPARTの画面での操作
コマンドまとめ
# Docker(wsl)の容量肥大化の原因となっている仮想ディスクファイル(ext4.vhdx)の選択
# {USERNAME}は環境に合わせて入力
select vdisk file="C:\Users\{USERNAME}\AppData\Local\Docker\wsl\data\ext4.vhdx"
# 仮想ディスクファイルを読み取り専用でアタッチ
attach vdisk readonly
# 仮想ディスクファイルの容量圧縮
compact vdisk
# 仮想ディスクファイルのデタッチ
detach vdisk
# DISKPART終了
exit
1. Docker(wsl)の容量肥大化の原因となっている仮想ディスクファイル(ext4.vhdx)の選択
{USERNAME}
はDockerで利用されているext4.vhdx
のファイルパスに合わせて入力
select vdisk file="C:\Users\{USERNAME}\AppData\Local\Docker\wsl\data\ext4.vhdx"
2.仮想ディスクファイルを読み取り専用でアタッチ
attach vdisk readonly
3.仮想ディスクファイルの容量圧縮
compact vdisk
4.仮想ディスクファイルのデタッチ
detach vdisk
5.DISKPART終了
exit
容量圧縮を実施しても効果があまり見られない時
Dockerの不要ファイルが影響している可能性があります
Docker公式ドキュメントにある不要なオブジェクトの削除が有効な場合もあります1
コマンド一覧を記載しておくので状況に応じて利用し、不要ファイルを削除した上でDISKPARTの処理を実施してみてください
不要ファイル削除コマンド
# 停止されているコンテナを削除
docker container prune
# 使用されていないビルドキャッシュを削除
docker builder prune
# コンテナで使用されていないイメージを削除
docker image prune
# コンテナで使用されていないボリュームを削除
docker volume prune
# コンテナで使用されていないネットワークを削除
docker network prune
# 上記すべてを一度に実行し削除
# (デフォルトではボリュームが対象外)
docker system prune
# ボリュームを含めすべて削除
docker system prune --volumes
docker container prune
停止されているコンテナを削除
docker builder prune
使用されていないビルドキャッシュを削除2
docker image prune
コンテナで使用されていないイメージを削除
docker volume prune
コンテナで使用されていないボリュームを削除
docker network prune
コンテナで使用されていないネットワークを削除
docker system prune
使用されていないコンテナ、ビルドキャッシュ、イメージ、ボリューム、ネットワークを全て削除するコマンド
ボリュームはデフォルトでは削除されないため、ボリュームも削除するには--volumes
フラグを使う必要がある1
まとめ
- この記事はDockerとWSLの併用でPCの容量が圧迫される場合、仮想ディスクファイル
ext4.vhdx
が肥大化していることが原因であるケースの対処法を記載 - WindowsではDISKPARTを用いて仮想ディスクファイルの圧縮が可能
- 容量圧縮の効果が見られない場合はDockerの不要ファイル削除を検討すべき
最後に
この記事が容量圧迫に苦しんでいるエンジニアの助けとなりますように、、、
参考文献