PR

【2025年版保存版】Docker Desktopの仮想ディスクをCドライブからDドライブへ移動する手順

〜C:の空き容量を回復し、開発環境を最適化する実践ガイド〜


🔍 はじめに:DockerがCドライブを圧迫する理由

Docker Desktop for Windows(WSL2バックエンド使用時)は、Linuxコンテナのデータを仮想ディスク(vhdx形式)に保存しています。

デフォルト保存場所:

C:\Users\<ユーザー名>\AppData\Local\Docker\wsl\
├── main\        # docker-desktop-data
├── disk\        # docker-desktop
└── data\        # ext4.vhdx(従来の場所)

問題点:

  • 仮想ディスクは初期でも数GB、運用が進むと数十GB以上に肥大化
  • コンテナイメージやボリュームデータがCドライブを圧迫
  • デフォルトでは保存場所を変更できない仕様

✅ 【重要】2025年版アップデート情報

従来の手順からの変更点:

WSLディストリビューションの構成変更

現在のDocker Desktopは docker-desktopdocker-desktop-data の2つのWSLディストリビューションを使用

ext4.vhdx単体の移動では不十分

推奨される移動コマンド

cmd /c mklink /D "%LOCALAPPDATA%\Docker\wsl\main" "D:\Docker\wsl\main"
cmd /c mklink /D "%LOCALAPPDATA%\Docker\wsl\disk" "D:\Docker\wsl\disk"

より安全な移動手順の採用

WSLのエクスポート・インポート機能を活用

データ損失リスクを最小化


📋 手順概要(安全な実行順)

ステップ内容所要時間
Step 1Docker Desktop の完全終了1-2分
Step 2WSLディストリビューションの移動5-15分
Step 3シンボリックリンク作成1分
Step 4Docker Desktop 再起動・動作確認2-3分

🧰 前提条件と事前チェック

システム要件:

  • Windows 10 / 11 で Docker Desktop を使用中
  • WSL2 バックエンドを利用している
  • 移動先ドライブに十分な空き容量がある(現在のDocker使用量の1.5倍以上推奨)

事前確認コマンド:

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

# Docker関連ディストリビューション確認
wsl -l -v | findstr docker

# 現在のディスク使用量確認
Get-ChildItem "$env:LOCALAPPDATA\Docker\wsl" -Recurse | Measure-Object -Property Length -Sum

🛠 Step 1:Docker Desktop を完全に終了

Docker Desktop の終了

タスクトレイの Docker アイコン → Quit Docker Desktop

完全に終了するまで待機

WSL全体の停止

wsl --shutdown

プロセス確認

# Dockerプロセスが残っていないか確認
Get-Process | Where-Object {$_.ProcessName -like "*docker*"}

📦 Step 2:WSLディストリビューションを別ドライブへ移動

方法A: WSLエクスポート・インポート(推奨)

# 移動先ディレクトリ作成
New-Item -ItemType Directory -Path "D:\Docker\wsl\backup" -Force
New-Item -ItemType Directory -Path "D:\Docker\wsl\main" -Force
New-Item -ItemType Directory -Path "D:\Docker\wsl\disk" -Force

# docker-desktop-data のエクスポート
wsl --export docker-desktop-data "D:\Docker\wsl\backup\docker-desktop-data.tar"

# docker-desktop のエクスポート
wsl --export docker-desktop "D:\Docker\wsl\backup\docker-desktop.tar"

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

# 新しい場所にインポート
wsl --import docker-desktop-data "D:\Docker\wsl\main" "D:\Docker\wsl\backup\docker-desktop-data.tar"
wsl --import docker-desktop "D:\Docker\wsl\disk" "D:\Docker\wsl\backup\docker-desktop.tar"

方法B: 物理ファイル移動+シンボリックリンク(簡易版)

# 元フォルダの移動
Move-Item "$env:LOCALAPPDATA\Docker\wsl\main" "D:\Docker\wsl\main"
Move-Item "$env:LOCALAPPDATA\Docker\wsl\disk" "D:\Docker\wsl\disk"

🔗 Step 3:シンボリックリンク作成(推奨方法)

管理者権限のコマンドプロンプトで実行:

cmd /c mklink /D "%LOCALAPPDATA%\Docker\wsl\main" "D:\Docker\wsl\main"
cmd /c mklink /D "%LOCALAPPDATA%\Docker\wsl\disk" "D:\Docker\wsl\disk"

PowerShellでの実行例:

# 管理者権限で実行
Start-Process cmd -ArgumentList "/c mklink /D `"$env:LOCALAPPDATA\Docker\wsl\main`" `"D:\Docker\wsl\main`"" -Verb RunAs
Start-Process cmd -ArgumentList "/c mklink /D `"$env:LOCALAPPDATA\Docker\wsl\disk`" `"D:\Docker\wsl\disk`"" -Verb RunAs

動作確認:

# シンボリックリンクが正しく作成されているか確認
Get-Item "$env:LOCALAPPDATA\Docker\wsl\main" | Select-Object LinkType, Target
Get-Item "$env:LOCALAPPDATA\Docker\wsl\disk" | Select-Object LinkType, Target

🚀 Step 4:Docker Desktopを再起動・動作確認

Docker Desktop を起動

スタートメニューまたはショートカットから起動

初回起動時は設定の再読み込みで時間がかかる場合があります

動作確認コマンド

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

# Docker エンジン動作確認
docker info

# 既存コンテナ・イメージ確認
docker ps -a
docker images

簡単な動作テスト

# Hello Worldコンテナ実行
docker run hello-world

📊 移動による効果(期待値)

項目効果詳細
💽 Cドライブ容量回復10GB〜数十GB仮想ディスクサイズによる
🔄 パフォーマンス向上中〜大SSD→HDD移動時は低下の可能性
📦 管理性向上Docker関連データの一元管理
🛡️ バックアップ容易性物理ファイル位置の明確化

⚠️ トラブルシューティング

問題1: Docker Desktop が起動しない

原因: シンボリックリンクの作成に失敗

# シンボリックリンクを削除して再作成
Remove-Item "$env:LOCALAPPDATA\Docker\wsl\main" -Force
Remove-Item "$env:LOCALAPPDATA\Docker\wsl\disk" -Force
# 再度リンク作成コマンドを実行

問題2: WSLディストリビューションが見つからない

原因: インポートに失敗

# 手動でディストリビューションを再インポート
wsl --import docker-desktop-data "D:\Docker\wsl\main" "D:\Docker\wsl\backup\docker-desktop-data.tar"
wsl --import docker-desktop "D:\Docker\wsl\disk" "D:\Docker\wsl\backup\docker-desktop.tar"

問題3: 既存コンテナ・イメージが消失

原因: データ移行の不完全

# バックアップから復元
wsl --unregister docker-desktop-data
wsl --import docker-desktop-data "D:\Docker\wsl\main" "D:\Docker\wsl\backup\docker-desktop-data.tar"

🧠 補足:使用していない場合は「削除」もあり

Dockerを使用していない、または完全に初期化したい場合:

# 完全削除(注意:全データが消去されます)
wsl --unregister docker-desktop
wsl --unregister docker-desktop-data

# Docker Desktop関連フォルダも削除
Remove-Item "$env:LOCALAPPDATA\Docker" -Recurse -Force

効果: 即座に数GB〜数十GBの容量回復


📎 おまけ:定期バックアップスクリプト(任意)

# Docker仮想ディスクの定期バックアップスクリプト
$backupPath = "D:\Backup\Docker"
$timestamp = Get-Date -Format "yyyyMMdd_HHmmss"

# バックアップディレクトリ作成
New-Item -ItemType Directory -Path $backupPath -Force

# WSLディストリビューションをエクスポート
wsl --export docker-desktop-data "$backupPath\docker-desktop-data_$timestamp.tar"
wsl --export docker-desktop "$backupPath\docker-desktop_$timestamp.tar"

# 古いバックアップを削除(30日以上前)
Get-ChildItem $backupPath -Filter "*.tar" | Where-Object {
    $_.CreationTime -lt (Get-Date).AddDays(-30)
} | Remove-Item -Force

Write-Host "バックアップ完了: $backupPath"

🔚 おわりに

Docker Desktopの仮想ディスクは、開発を続けるほどCドライブを圧迫する隠れたボトルネックです。2025年現在のDocker Desktopの構成に合わせた今回の手順を使用することで、安全かつ効率的にDドライブへ移行できます。

重要なポイント:

  • 従来のext4.vhdx移動だけでは不十分
  • WSLディストリビューション全体の移動が必要
  • シンボリックリンクによる透過的なアクセス実現

この手順により、開発環境の最適化・PCの長寿命化を実現できます。定期的なバックアップも忘れずに実施し、安全な開発環境を維持しましょう。


参考情報:

  • 本記事の内容は2025年7月時点のDocker Desktop最新版に基づいています
  • WSL2とDocker Desktopの仕様変更により、手順が変更される可能性があります
  • 実行前には必ず現在のDocker環境のバックアップを取得することを強く推奨します

コメント

タイトルとURLをコピーしました