Windows11の外付SSDにDocker+Ubuntu環境を作り、PHP+MySQLをブラウザ表示するまで
ゴール:外付SSDに「Ubuntu(WSL2)」と「Dockerの巨大データ領域(イメージ/ボリューム)」を寄せて、PHP+MySQLの動作確認をブラウザで行います。
※Docker Desktop本体は通常Cドライブに入りますが、肥大化する“データ”を外付SSDに逃がすのが本記事のポイントです。
この記事でやること
- 外付SSDの準備(フォルダ作成、ドライブ文字の固定)
- WSL2とUbuntuを導入 → Ubuntuの保存先を外付SSDへ移動
- Docker Desktopを導入 → Dockerのデータ保存先を外付SSDへ
- 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の準備(ドライブ文字を固定する)
- Windowsの「ディスクの管理」を開く(Win →「ディスクの管理」)
- 外付SSDのボリュームを右クリック →「ドライブ文字とパスの変更」
- 空いている固定の文字(例:E:)を割り当て
- エクスプローラーで
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ドライブ圧迫を防ぐ」最大のキモです。
まず、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用のボタンがあります)。
-
Docker Desktop 公式(製品ページ):
https://www.docker.com/products/docker-desktop/ -
インストール手順の公式ドキュメント(Windows):
https://docs.docker.com/desktop/setup/install/windows-install/
3-0-1. ダウンロードからインストールまで(迷子にならない手順)
- 上記の公式ページを開き、「Download for Windows」または「Docker Desktop for Windows」をクリックしてインストーラー(例:Docker Desktop Installer.exe)をダウンロードします。
- ダウンロードした Docker Desktop Installer.exe をダブルクリックで起動します。
-
セットアップ中に「Use WSL 2 instead of Hyper-V(WSL 2を使用)」系の選択肢が表示されたら、基本はWSL2を選びます。
※環境により表示や文言が多少違いますが、「WSL2を使う」方向でOKです。
- インストール完了後、指示があれば再起動します。
- 起動後、タスクトレイのクジラ(Docker)アイコンが起動状態になっていればOKです。
先に本記事の「2. WSL2 + Ubuntu」を終わらせてから、Docker Desktopを入れ直すとスムーズです。
すでにWSL2を入れているのに警告が出る場合は、一度PC再起動→Docker再起動で直ることも多いです。
3-1. Docker Desktopをインストール
- Docker Desktop for Windows を公式からダウンロード
- インストーラを起動
- 途中で「WSL 2 を使う」系の選択が出たらWSL2を選ぶ
- 起動後、Dockerが立ち上がることを確認
3-2. Dockerデータ(イメージ/ボリューム)の置き場を外付SSDへ
方法は2つあります。おすすめはA(設定画面で移動)、うまくいかない場合はB(WSLのexport/importで強制移設)です。
方法A:Docker Desktopの設定から移動(まずはこれ)
- Docker Desktopを開く
- Settings → Resources → Advanced
- Disk image location を外付SSDの空フォルダへ(例:
E:\dev\docker\disk) - 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」を即起動 → ブラウザ確認まで一直線
※参考にされる場合は自己責任でお願いします。
PCトラブルは解決しましたか?
もし「会社のPCが全部遅い」「Office 365のエラーが多発する」「ネットワークが不安定」といった、調べても解決しない「会社全体」のお悩みがありましたら、ぜひご相談ください。
「Windows11 高速化」といったお悩み検索で毎月1,200人以上が訪れる、
このサイトの運営者(建設会社IT部長)が、川崎・横浜・東京城南エリアの法人様限定で「無料ITお困りごと診断」を行っています。
