ゴール:外付SSDに「Ubuntu(WSL2)」と「Dockerの巨大データ領域(イメージ/ボリューム)」を寄せて、PHP+MySQLの動作確認をブラウザで行います。
※Docker Desktop本体は通常Cドライブに入りますが、肥大化する“データ”を外付SSDに逃がすのが本記事のポイントです。

この記事でやること

  1. 外付SSDの準備(フォルダ作成、ドライブ文字の固定)
  2. WSL2とUbuntuを導入 → Ubuntuの保存先を外付SSDへ移動
  3. Docker Desktopを導入 → Dockerのデータ保存先を外付SSDへ
  4. Docker上で「PHP(Apache)」+「MySQL」を起動し、http://localhost:8080で表示確認

最初に注意(ここだけ読んでおくと事故が減る)

  • 外付SSDはできれば常時接続前提にしてください(抜くとWSL/Dockerがコケます)。
  • 外付SSDのドライブ文字(例:E:)は固定します。途中で変わるとパスが壊れます。
  • 会社利用の場合、Docker Desktopは利用条件(規模によって有償)があるので、社内ルールも確認してください。

0. 事前条件(チェックリスト)

  • Windows 11(管理者権限あり)
  • 外付SSD(推奨:USB 3.2 / NVMeケース)
  • BIOS/UEFIで仮想化(VT-x/AMD-V)が有効
  • Windowsの機能「WSL」と「仮想マシンプラットフォーム」を有効化できる

外付SSDの推奨構成

  • フォーマット:NTFS
  • ドライブ文字:例)E:(あとで固定する)
  • 作業用フォルダ:E:\dev を作る(本記事はここに統一)

1. 外付SSDの準備(ドライブ文字を固定する)

  1. Windowsの「ディスクの管理」を開く(Win →「ディスクの管理」)
  2. 外付SSDのボリュームを右クリック →「ドライブ文字とパスの変更」
  3. 空いている固定の文字(例:E:)を割り当て
  4. エクスプローラーで E:\dev を作成
mkdir E:\dev
mkdir E:\dev\wsl
mkdir E:\dev\docker
mkdir E:\dev\projects

2. WSL2 + Ubuntuを入れて、Ubuntuの保存先を外付SSDへ移動

2-1. WSL2とUbuntuをインストール

PowerShellを管理者で起動して、次を実行します。

wsl --install

これでWSL本体+既定ディストリ(環境によってはUbuntu)が入ります。終わったら再起動が入ることがあります。

インストール状況確認:

wsl -l -v

例:Ubuntu が VERSION 2 になっていればOK。もし 1 の場合は次:

wsl --set-version Ubuntu 2

2-2. Ubuntu(WSL)の実体を外付SSDへ移動(export/import)

ここが「Cドライブ圧迫を防ぐ」最大のキモです。

注意:この操作はUbuntuを“移設”します。作業中はWSLを止めます。
まず、WSLを止める:

wsl --shutdown

Ubuntuを外付SSDへ移動(例:E:\dev\wsl\Ubuntu):

mkdir E:\dev\wsl\Ubuntu
wsl --export Ubuntu E:\dev\wsl\Ubuntu\ubuntu.tar
wsl --unregister Ubuntu
wsl --import Ubuntu E:\dev\wsl\Ubuntu E:\dev\wsl\Ubuntu\ubuntu.tar --version 2

もう一度確認:

wsl -l -v

ここまでで「Ubuntu(WSL2)」は外付SSD側に移りました。

3. Docker Desktopを入れて、Dockerのデータ保存先を外付SSDへ

3-0. Docker DesktopのダウンロードURL(公式)

まずはDocker公式からDocker Desktopをダウンロードします(Windows用のボタンがあります)。

3-0-1. ダウンロードからインストールまで(迷子にならない手順)

  1. 上記の公式ページを開き、「Download for Windows」または「Docker Desktop for Windows」をクリックしてインストーラー(例:Docker Desktop Installer.exe)をダウンロードします。
  2. ダウンロードした Docker Desktop Installer.exe をダブルクリックで起動します。
  3. セットアップ中に「Use WSL 2 instead of Hyper-V(WSL 2を使用)」系の選択肢が表示されたら、基本はWSL2を選びます。

    ※環境により表示や文言が多少違いますが、「WSL2を使う」方向でOKです。
  4. インストール完了後、指示があれば再起動します。
  5. 起動後、タスクトレイのクジラ(Docker)アイコンが起動状態になっていればOKです。
もし「WSL2が必要」などの警告が出たら:
先に本記事の「2. WSL2 + Ubuntu」を終わらせてから、Docker Desktopを入れ直すとスムーズです。
すでにWSL2を入れているのに警告が出る場合は、一度PC再起動→Docker再起動で直ることも多いです。

3-1. Docker Desktopをインストール

  1. Docker Desktop for Windows を公式からダウンロード
  2. インストーラを起動
  3. 途中で「WSL 2 を使う」系の選択が出たらWSL2を選ぶ
  4. 起動後、Dockerが立ち上がることを確認

3-2. Dockerデータ(イメージ/ボリューム)の置き場を外付SSDへ

方法は2つあります。おすすめはA(設定画面で移動)、うまくいかない場合はB(WSLのexport/importで強制移設)です。

方法A:Docker Desktopの設定から移動(まずはこれ)

  1. Docker Desktopを開く
  2. SettingsResourcesAdvanced
  3. Disk image location を外付SSDの空フォルダへ(例:E:\dev\docker\disk
  4. Apply & restart
mkdir E:\dev\docker\disk

もし「Apply & restart」で固まる/移動できない環境もあるので、その場合は次の方法Bへ。

方法B:WSLのexport/importでDockerの内部データを外付SSDへ移設(最終手段・強い)

Docker Desktopをいったん終了(タスクトレイのクジラアイコン → Quit)してから実行します。

wsl --shutdown
wsl -l -v

docker-desktop / docker-desktop-data が止まっていることを確認したら、外付SSDへ移します。

mkdir E:\dev\wsl\docker-desktop
mkdir E:\dev\wsl\docker-desktop-data

wsl --export docker-desktop E:\dev\wsl\docker-desktop\docker-desktop.tar
wsl --export docker-desktop-data E:\dev\wsl\docker-desktop-data\docker-desktop-data.tar

wsl --unregister docker-desktop
wsl --unregister docker-desktop-data

wsl --import docker-desktop E:\dev\wsl\docker-desktop E:\dev\wsl\docker-desktop\docker-desktop.tar --version 2
wsl --import docker-desktop-data E:\dev\wsl\docker-desktop-data E:\dev\wsl\docker-desktop-data\docker-desktop-data.tar --version 2

終わったらDocker Desktopを起動し直します。

4. Docker上で「PHP+MySQL」を起動してブラウザ表示(最短)

ここからが“動く成果物”です。
外付SSD側にプロジェクトを作り、docker composeで一発起動します。

4-1. プロジェクト作成(外付SSD)

cd /d E:\dev\projects
mkdir win-docker-extssd
cd win-docker-extssd
mkdir src

4-2. 必要ファイルを作る(コピペOK)

① docker-compose.yml(プロジェクト直下に作成)

version: "3.9"

services:
web:
build: .
container_name: php_web
ports:
- "8080:80"
volumes:
- ./src:/var/www/html
depends_on:
- db

db:
image: mysql:8.0
container_name: mysql_db
environment:
MYSQL_ROOT_PASSWORD: rootpass
MYSQL_DATABASE: appdb
MYSQL_USER: appuser
MYSQL_PASSWORD: apppass
command: ["--default-authentication-plugin=mysql_native_password"]
ports:
- "3306:3306"
volumes:
- dbdata:/var/lib/mysql

volumes:
dbdata:

② Dockerfile(プロジェクト直下に作成)

FROM php:8.3-apache

RUN apt-get update \
&& apt-get install -y --no-install-recommends \
libzip-dev \
&& docker-php-ext-install mysqli pdo_mysql \
&& a2enmod rewrite \
&& rm -rf /var/lib/apt/lists/*

WORKDIR /var/www/html

③ PHP表示ファイル(src\index.php を作成)

<?php
$host = 'db';
$db   = 'appdb';
$user = 'appuser';
$pass = 'apppass';
$charset = 'utf8mb4';

$dsn = "mysql:host=$host;dbname=$db;charset=$charset";

echo "<h1>PHP is running!</h1>";

try {
$pdo = new PDO($dsn, $user, $pass, [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
]);
$stmt = $pdo->query("SELECT NOW() AS nowtime, VERSION() AS mysqlver");
$row = $stmt->fetch(PDO::FETCH_ASSOC);

echo "<p>MySQL connected ✅</p>";
echo "<pre>" . htmlspecialchars(print_r($row, true), ENT_QUOTES, 'UTF-8') . "</pre>";
} catch (Exception $e) {
echo "<p>MySQL connect failed ❌</p>";
echo "<pre>" . htmlspecialchars($e->getMessage(), ENT_QUOTES, 'UTF-8') . "</pre>";
}

4-3. 起動(ビルド→起動)

プロジェクト直下(E:\dev\projects\win-docker-extssd)で実行:

docker compose up -d --build

4-4. ブラウザで確認

  • http://localhost:8080 を開く
  • PHP is running! と表示され、MySQL connected ✅ が出れば成功

停止・削除コマンド(覚えておくと便利)

# 停止
docker compose down

# 停止+ボリューム削除(DBデータも消える)
docker compose down -v

5. よくある詰まりポイント(ここだけで大体解決)

Q1. 外付SSDを抜いたらDocker/WSLが起動しなくなった

  • 外付SSD運用は「常時接続」が基本です。
  • まず差し直してから wsl --shutdown → Docker Desktop再起動。

Q2. Dockerのデータ移動(Disk image location)が固まる

  • 記事の方法B(WSL export/import)を使うと突破できることが多いです。
  • 移動先は「権限的に書き込み可能な空フォルダ」にしてください。

Q3. localhost:8080 が開けない

  • 起動確認:docker ps
  • ログ確認:docker logs php_web
  • 他アプリが8080を使用している場合:composeの "8080:80""18080:80" に変更して再起動

Q4. MySQL接続できない(MySQL connect failed)

  • MySQLが起動中か:docker logs mysql_db
  • コンテナ間接続はホスト名db(composeのservice名)にするのがコツ
  • 初回起動はDBの初期化で少し時間がかかるので、数十秒待って再読込

まとめ:Cドライブを守りつつ、最短で「PHP+MySQLが動く」まで行ける

  • Ubuntu(WSL2)を外付SSDへ移す → Windows環境が軽くなる
  • Dockerのデータを外付SSDへ寄せる → イメージ/ボリューム肥大化に強い
  • docker composeで「PHP+MySQL」を即起動 → ブラウザ確認まで一直線

 
※参考にされる場合は自己責任でお願いします。

この記事の運営者(IT部長)からのお知らせ

PCトラブルは解決しましたか?

もし「会社のPCが全部遅い」「Office 365のエラーが多発する」「ネットワークが不安定」といった、調べても解決しない「会社全体」のお悩みがありましたら、ぜひご相談ください。

「Windows11 高速化」といったお悩み検索で毎月1,200人以上が訪れる、
このサイトの運営者
(建設会社IT部長)が、川崎・横浜・東京城南エリアの法人様限定で「無料ITお困りごと診断」を行っています。