Skip to content

Docker Desktop WSL ext4.vhdx のサイズ縮小

Docker Desktop を WSL 2 バックエンドで使用している場合、ext4.vhdx ファイルが予想以上に大きなサイズになることがあります。これは WSL 2 の仮想ディスクの特性によるもので、本記事ではこの問題の原因と効果的な解決方法を解説します。

問題の原因

WSL 2 で使用される ext4.vhdx ファイルは「動的仮想ハードディスク」であり、以下の特性を持っています:

  • 最大サイズまで拡張可能な設計
  • 初期状態ではわずかな構造データのみで開始
  • データ追加に伴い最大サイズまで動的に拡張
  • データ削除時に自動的に縮小しない

このため、Docker のコンテナやイメージ、ボリュームを削除しても、仮想ディスクファイル自体のサイズは減少せず、ディスク領域が無駄に占有された状態が続きます。

基本的なクリーンアップ

まず最初に、Docker の標準的なクリーンアップコマンドを実行してください:

bash
# 未使用のDockerリソースを一括削除
docker system prune -a

# ダングリングボリュームの削除
docker volume rm $(docker volume ls -q -f dangling=true)

状態確認:

bash
docker system df

ただし、これだけでは ext4.vhdx ファイルのサイズは減少しません。

解決方法

方法1: Docker Desktop の組み込み機能を使用(推奨)

Docker Desktop には専用のクリーンアップ機能が実装されています:

  1. Docker Desktop クライアントを開く
  2. タイトルバーの (?) アイコン(ヘルプ)をクリック
  3. 「Clean / Purge data」 を選択
  4. ポップアップで 「WSL 2」 にチェックを入れる
  5. クリーンアップを実行

WARNING

この操作はすべての Docker データを完全に削除します。必要なデータがある場合は事前にバックアップしてください。

方法2: Windows 標準ツールを使用した手動縮小

Windows Pro エディションの場合

  1. すべての WSL インスタンスを停止:
powershell
wsl --shutdown
  1. PowerShell 管理者権限で実行:
powershell
Optimize-VHD -Path "${Env:LocalAppData}\Docker\wsl\data\ext4.vhdx" -Mode Full

Windows Home エディションの場合

  1. WSL を停止:
cmd
wsl --shutdown
  1. 管理者コマンドプロンプトで diskpart を実行:
cmd
diskpart
  1. diskpart 内で以下を実行:
diskpart
select vdisk file="C:\Users\<ユーザー名>\AppData\Local\Docker\wsl\data\ext4.vhdx"
compact vdisk
exit

方法3: 完全再インストール(最終手段)

データのバックアップが不要な場合:

powershell
# WSL ディストリビューションの確認
wsl -l -v

# Docker 関連ディストリビューションの削除
wsl --unregister docker-desktop
wsl --unregister docker-desktop-data

# Docker Desktop の再インストール

先進的なオプション

WSL 2 のスパース機能(試験的)

WSL 2.0.0 以降では、スパース VHD 機能が実験的に導入されています:

powershell
# 既存ディストリビューションをスパースに変換
wsl --manage <distro-name> --set-sparse true

設定ファイルで永続化(%USERPROFILE%\.wslconfig):

ini
[experimental]
sparseVhd=true

注意

スパース機能は試験的な機能であり、ファイルシステムの破損リスクが報告されています。重要なシステムでは使用を避け、使用する場合は必ずバックアップを取得してください。

サードパーティツールの利用

wslcompact などのユーティリティも利用可能です:

powershell
# wslcompact の使用例
wslcompact

このツールは各 WSL ディストリビューションのサイズを分析し、最適化の見積もりを提供します。

予防策とベストプラクティス

  1. 定期的なメンテナンス: 月に一度はディスク使用量を確認し、不要なリソースを削除
  2. モニタリング: docker system df でリソース使用状況を定期的にチェック
  3. バックアップ: 重要なデータは常にバックアップを取得
  4. 最新版の使用: Docker Desktop と WSL を常に最新版に更新

まとめ

Docker Desktop の WSL 2 バックエンドにおける ext4.vhdx ファイルの肥大化は一般的な問題ですが、適切なツールと手順を使用することで効果的に管理できます。定期的なメンテナンスと適切なツールの使用により、貴重なディスク領域を節約し、開発環境を最適な状態に保つことができます。