Docker Desktop WSL ext4.vhdx のサイズ縮小
Docker Desktop を WSL 2 バックエンドで使用している場合、ext4.vhdx
ファイルが予想以上に大きなサイズになることがあります。これは WSL 2 の仮想ディスクの特性によるもので、本記事ではこの問題の原因と効果的な解決方法を解説します。
問題の原因
WSL 2 で使用される ext4.vhdx
ファイルは「動的仮想ハードディスク」であり、以下の特性を持っています:
- 最大サイズまで拡張可能な設計
- 初期状態ではわずかな構造データのみで開始
- データ追加に伴い最大サイズまで動的に拡張
- データ削除時に自動的に縮小しない
このため、Docker のコンテナやイメージ、ボリュームを削除しても、仮想ディスクファイル自体のサイズは減少せず、ディスク領域が無駄に占有された状態が続きます。
基本的なクリーンアップ
まず最初に、Docker の標準的なクリーンアップコマンドを実行してください:
# 未使用のDockerリソースを一括削除
docker system prune -a
# ダングリングボリュームの削除
docker volume rm $(docker volume ls -q -f dangling=true)
状態確認:
docker system df
ただし、これだけでは ext4.vhdx
ファイルのサイズは減少しません。
解決方法
方法1: Docker Desktop の組み込み機能を使用(推奨)
Docker Desktop には専用のクリーンアップ機能が実装されています:
- Docker Desktop クライアントを開く
- タイトルバーの
(?)
アイコン(ヘルプ)をクリック - 「Clean / Purge data」 を選択
- ポップアップで 「WSL 2」 にチェックを入れる
- クリーンアップを実行
WARNING
この操作はすべての Docker データを完全に削除します。必要なデータがある場合は事前にバックアップしてください。
方法2: Windows 標準ツールを使用した手動縮小
Windows Pro エディションの場合
- すべての WSL インスタンスを停止:
wsl --shutdown
- PowerShell 管理者権限で実行:
Optimize-VHD -Path "${Env:LocalAppData}\Docker\wsl\data\ext4.vhdx" -Mode Full
Windows Home エディションの場合
- WSL を停止:
wsl --shutdown
- 管理者コマンドプロンプトで diskpart を実行:
diskpart
- diskpart 内で以下を実行:
select vdisk file="C:\Users\<ユーザー名>\AppData\Local\Docker\wsl\data\ext4.vhdx"
compact vdisk
exit
方法3: 完全再インストール(最終手段)
データのバックアップが不要な場合:
# WSL ディストリビューションの確認
wsl -l -v
# Docker 関連ディストリビューションの削除
wsl --unregister docker-desktop
wsl --unregister docker-desktop-data
# Docker Desktop の再インストール
先進的なオプション
WSL 2 のスパース機能(試験的)
WSL 2.0.0 以降では、スパース VHD 機能が実験的に導入されています:
# 既存ディストリビューションをスパースに変換
wsl --manage <distro-name> --set-sparse true
設定ファイルで永続化(%USERPROFILE%\.wslconfig
):
[experimental]
sparseVhd=true
注意
スパース機能は試験的な機能であり、ファイルシステムの破損リスクが報告されています。重要なシステムでは使用を避け、使用する場合は必ずバックアップを取得してください。
サードパーティツールの利用
wslcompact
などのユーティリティも利用可能です:
# wslcompact の使用例
wslcompact
このツールは各 WSL ディストリビューションのサイズを分析し、最適化の見積もりを提供します。
予防策とベストプラクティス
- 定期的なメンテナンス: 月に一度はディスク使用量を確認し、不要なリソースを削除
- モニタリング:
docker system df
でリソース使用状況を定期的にチェック - バックアップ: 重要なデータは常にバックアップを取得
- 最新版の使用: Docker Desktop と WSL を常に最新版に更新
まとめ
Docker Desktop の WSL 2 バックエンドにおける ext4.vhdx
ファイルの肥大化は一般的な問題ですが、適切なツールと手順を使用することで効果的に管理できます。定期的なメンテナンスと適切なツールの使用により、貴重なディスク領域を節約し、開発環境を最適な状態に保つことができます。