PR

【保存版】Docker Desktopの仮想ディスクをDドライブへ移動+アップデート対策ワンクリック復旧スクリプト


【保存版】Docker Desktopの仮想ディスクをDドライブへ移動+アップデート対策ワンクリック復旧スクリプト

〜Cドライブ容量圧迫を根本解消し、自動でリンク再生できる開発環境最適化ガイド〜


📌 本記事の目的

  • Docker Desktopの仮想ディスク(ext4.vhdx)がC:ドライブを圧迫している…
  • D:ドライブに移動したいが、アップデートのたびにリンクが壊れて困る
  • 手動復旧ではなく「ワンクリックで復旧」したい

という開発者のために、


✅ この記事でできること

  • Docker Desktopの仮想ディスクをD:へ安全に移動
  • シンボリックリンクでC:→D:を偽装
  • アップデートでリンクが消えても1コマンドで復旧する .ps1 スクリプト付き

💽 なぜCドライブが圧迫されるのか?

Docker Desktop(WSL2バックエンド)では、以下のような仮想ディスク構造になっています:

C:\Users\<ユーザー名>\AppData\Local\Docker\wsl\data\ext4.vhdx

この ext4.vhdx に、以下すべてが保存されます:

  • Dockerイメージ
  • コンテナ
  • ボリューム
  • キャッシュ

→ 10GB〜100GBに肥大化することも。


✅ ステップ1:仮想ディスクをDドライブへ移動

🧱 ① Docker Desktopを完全に終了

wsl --shutdown
taskkill /f /im "Docker Desktop.exe"

📦 ② 仮想ディスクをD:に移動(例:D:\Docker\data

# 元ファイルパス
$src = "$env:LOCALAPPDATA\Docker\wsl\data\ext4.vhdx"

# 移動先(任意だが以下を例に)
$dst = "D:\Docker\data\ext4.vhdx"

# フォルダ作成とファイル移動
New-Item -ItemType Directory -Path "D:\Docker\data" -Force
Move-Item -Path $src -Destination $dst

🧹 ③ 元の data フォルダを削除

Remove-Item "$env:LOCALAPPDATA\Docker\wsl\data" -Recurse -Force

🔗 ④ シンボリックリンクを作成(C→D)

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

🚀 ⑤ Docker Desktop を起動 → 正常に動けば成功


🧠 アップデート対策:リンクが消えたときの復旧手順

Dockerのアップデートによってリンクが消えたり、C:に勝手に新しい data が作られることがあります。

✅ 対応方法は「削除→再リンク→再起動」の3ステップ


🔁 ステップ2:1コマンドで復旧できる .ps1 スクリプト

# repair-docker-link.ps1

$target = "D:\Docker\data"
$link = "$env:LOCALAPPDATA\Docker\wsl\data"
$dockerExe = "C:\Program Files\Docker\Docker\Docker Desktop.exe"

Write-Host "`n🛠 Docker Desktop シンボリックリンク修復スクリプトを実行中..." -ForegroundColor Cyan

# Docker停止
Write-Host "🛑 Docker停止中..."
wsl --shutdown
Stop-Process -Name "Docker Desktop" -Force -ErrorAction SilentlyContinue

# 不正なフォルダを削除
if (Test-Path $link -and !(Test-Path "$link\ext4.vhdx")) {
    Write-Host "🧹 C:側の誤生成された data フォルダを削除..."
    Remove-Item $link -Recurse -Force
}

# リンク再作成
if (!(Test-Path "$link\ext4.vhdx")) {
    Write-Host "🔗 シンボリックリンクを作成中..."
    cmd /c mklink /D "$link" "$target" | Out-Null
}

# Docker起動
Write-Host "🚀 Docker Desktop を起動中..."
Start-Process "$dockerExe"

Write-Host "✅ 完了しました。" -ForegroundColor Green

✅ 実行方法

  1. 上記コードを repair-docker-link.ps1 という名前で保存
  2. PowerShell を「管理者として実行」
  3. スクリプトを実行:
.\repair-docker-link.ps1

🎁 オプション:ショートカットを作ってワンクリック実行にする

  • repair-docker-link.ps1 に対して .bat を用意:
@echo off
powershell -ExecutionPolicy Bypass -File "D:\Docker\repair-docker-link.ps1"
  • これをデスクトップに置けば、ダブルクリックで復旧完了します。

✅ まとめ

内容説明
C:ドライブを圧迫する理由ext4.vhdx にすべて保存されるため
D:ドライブへ移動する手順移動→削除→シンボリックリンク
アップデート後の復旧方法repair-docker-link.ps1 で自動復元
長期安定運用のポイントシンボリックリンクとスクリプトで自動化

💡 この記事に加え、「WSLとDockerの最適ストレージ設計」「Notionマニュアル用PDF」「スクリプト一式の.zipパッケージ」なども提供可能です。必要であればお知らせください。

コメント

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