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 FullWindows 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 ファイルの肥大化は一般的な問題ですが、適切なツールと手順を使用することで効果的に管理できます。定期的なメンテナンスと適切なツールの使用により、貴重なディスク領域を節約し、開発環境を最適な状態に保つことができます。