【2026年版】AWS をやめてローカル Docker へ!Laravel 11 + MySQL 8.4 の開発環境を構築する完全ガイド
個人開発の管理ツールを AWS(EC2 + RDS)で運用していましたが、コストや運用の手間を考慮し、ローカルの Docker 環境に移行することにしました。
この記事では、Windows 環境に Docker Desktop をインストールし、Laravel 11 + MySQL 8.4 + nginx の開発環境を docker-compose で構築する手順を解説します。
この記事で構築する環境
| 項目 | バージョン |
|---|---|
| PHP | 8.3 |
| Laravel | 11 |
| MySQL | 8.4(LTS) |
| Web サーバー | nginx |
| 環境 | Docker Compose |
対象読者
- AWS の運用コストを削減したい方
- ローカルで完結する開発環境を構築したい方
- Docker で Laravel 環境を構築したい方
- Windows で PHP 開発環境を整えたい方
なぜ AWS をやめてローカル Docker にしたのか
AWS 運用時の課題
従来は以下の構成で管理ツールを運用していました。
- EC2(t3.micro): PHP 5.6 + CodeIgniter 2
- RDS(MySQL 8.0)
- nginx + php-fpm
この構成には以下の課題がありました。
- コスト: 無料枠終了後、月額 $30〜50 程度の費用が発生
- 運用の手間: EC2 のセキュリティパッチ適用、監視など
- 古い技術スタック: PHP 5.6 + CodeIgniter 2 のリプレースが必要
ローカル Docker のメリット
管理ツールは「自分だけが使う」用途だったため、以下の理由でローカル Docker への移行を決めました。
| 比較項目 | AWS (EC2 + RDS) | ローカル Docker |
|---|---|---|
| コスト | 無料枠後 $30-50/月 | $0 |
| 外部アクセス | ✅ 可能 | ❌ 基本不可 |
| 常時稼働 | ✅ 24時間 | PC 起動時のみ |
| 運用の手間 | サーバー管理必要 | ほぼ不要 |
| デプロイ | CI/CD 設定必要 | 不要(直接編集) |
自分専用のツールであれば、ローカル Docker で十分という結論に至りました。
事前準備:CPU アーキテクチャの確認
Docker Desktop をダウンロードする前に、PC の CPU アーキテクチャを確認します。PowerShell で以下のコマンドを実行してください。
echo $env:PROCESSOR_ARCHITECTURE- AMD64 → Intel / AMD 製 CPU(一般的な Windows PC)
- ARM64 → ARM 製 CPU(Surface Pro X など)
ほとんどの Windows PC は AMD64 です。
Docker Desktop のインストール
ダウンロード
以下の公式サイトから Docker Desktop をダウンロードします。
先ほど確認した CPU アーキテクチャに合わせて選択してください。
インストール手順
- ダウンロードしたインストーラーを実行
- 「Use WSL 2 instead of Hyper-V」にチェック(推奨)
- インストール完了後、PC を再起動
ライセンス同意
再起動後、Docker Desktop を起動すると「Docker Subscription Service Agreement」が表示されます。
- 個人利用・学習目的 → 無料(Personal プラン)
- 小規模企業(250人未満 かつ 年商$10M未満) → 無料
- 大企業 → 有料プランが必要
個人開発であれば「Accept」をクリックして問題ありません。
動作確認
PowerShell で以下のコマンドを実行し、インストールを確認します。
docker --version
docker compose version以下のように表示されれば OK です。
Docker version 29.1.3, build f52814d
Docker Compose version v2.40.3-desktop.1プロジェクトのディレクトリ構成
以下の構成でプロジェクトを作成します。
admin-v2/
├── docker/
│ ├── php/
│ │ └── Dockerfile
│ ├── nginx/
│ │ └── default.conf
│ └── mysql/
│ └── init/
├── src/ ← Laravel プロジェクト
├── docker-compose.yml
├── .gitignore
└── README.md各設定ファイルの作成
docker-compose.yml
プロジェクトのルートに docker-compose.yml を作成します。
(パスワードなどの機密情報はダミー値なので、参考にする場合は置き換えてください)
services:
# PHP-FPM + Laravel
app:
build:
context: ./docker/php
dockerfile: Dockerfile
container_name: admin-v2-app
restart: unless-stopped
volumes:
- ./src:/var/www/html
working_dir: /var/www/html
depends_on:
- db
networks:
- admin-network
# Nginx
web:
image: nginx:alpine
container_name: admin-v2-web
restart: unless-stopped
ports:
- "8080:80"
volumes:
- ./src:/var/www/html
- ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf
depends_on:
- app
networks:
- admin-network
# MySQL 8.4 (LTS)
db:
image: mysql:8.4
container_name: admin-v2-db
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: admin_v2
MYSQL_USER: laravel
MYSQL_PASSWORD: secret
ports:
- "3306:3306"
volumes:
- db_data:/var/lib/mysql
- ./docker/mysql/init:/docker-entrypoint-initdb.d
networks:
- admin-network
# phpMyAdmin
phpmyadmin:
image: phpmyadmin:latest
container_name: admin-v2-pma
restart: unless-stopped
ports:
- "8081:80"
environment:
PMA_HOST: db
PMA_USER: root
PMA_PASSWORD: root
depends_on:
- db
networks:
- admin-network
networks:
admin-network:
driver: bridge
volumes:
db_data:docker/php/Dockerfile
PHP 8.3 + 必要な拡張機能をインストールする Dockerfile です。
FROM php:8.3-fpm-alpine
# 必要なパッケージをインストール
RUN apk add --no-cache \
git \
curl \
zip \
unzip \
libpng-dev \
libjpeg-turbo-dev \
freetype-dev \
oniguruma-dev \
libxml2-dev \
icu-dev \
&& docker-php-ext-configure gd --with-freetype --with-jpeg \
&& docker-php-ext-install -j$(nproc) \
pdo \
pdo_mysql \
mbstring \
exif \
pcntl \
bcmath \
gd \
intl \
opcache
# Composer インストール
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
# OPcache 設定
RUN echo "opcache.enable=1" >> /usr/local/etc/php/conf.d/opcache.ini \
&& echo "opcache.memory_consumption=128" >> /usr/local/etc/php/conf.d/opcache.ini \
&& echo "opcache.interned_strings_buffer=8" >> /usr/local/etc/php/conf.d/opcache.ini \
&& echo "opcache.max_accelerated_files=10000" >> /usr/local/etc/php/conf.d/opcache.ini \
&& echo "opcache.validate_timestamps=1" >> /usr/local/etc/php/conf.d/opcache.ini \
&& echo "opcache.revalidate_freq=2" >> /usr/local/etc/php/conf.d/opcache.ini
# PHP 設定
RUN echo "upload_max_filesize=64M" >> /usr/local/etc/php/conf.d/uploads.ini \
&& echo "post_max_size=64M" >> /usr/local/etc/php/conf.d/uploads.ini \
&& echo "memory_limit=256M" >> /usr/local/etc/php/conf.d/memory.ini
WORKDIR /var/www/html
RUN addgroup -g 1000 laravel && adduser -u 1000 -G laravel -s /bin/sh -D laravel
USER laravel
EXPOSE 9000
CMD ["php-fpm"]docker/nginx/default.conf
nginx の設定ファイルです。
server {
listen 80;
server_name localhost;
root /var/www/html/public;
index index.php index.html;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
client_max_body_size 64M;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass app:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
fastcgi_read_timeout 300;
fastcgi_send_timeout 300;
}
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
expires 1y;
add_header Cache-Control "public, immutable";
access_log off;
}
location ~ /\.(?!well-known).* {
deny all;
}
}.gitignore
# Laravel
/src/vendor/
/src/node_modules/
/src/.env
/src/storage/*.key
/src/storage/logs/*
!/src/storage/logs/.gitkeep
# IDE
.idea/
.vscode/
*.swp
*.swo
# OS
.DS_Store
Thumbs.db
# Docker
docker/mysql/data/
# Logs
*.logDocker コンテナの起動
設定ファイルを作成したら、コンテナをビルドして起動します。
cd C:\work\workspace\admin-v2
docker compose up -d --build初回はイメージのダウンロードとビルドに数分かかります。
起動状態を確認します。
docker compose ps以下のように 4 つのコンテナが Up になっていれば OK です。
NAME IMAGE STATUS PORTS
admin-v2-app admin-v2-app Up 9000/tcp
admin-v2-db mysql:8.4 Up 0.0.0.0:3306->3306/tcp
admin-v2-pma phpmyadmin:latest Up 0.0.0.0:8081->80/tcp
admin-v2-web nginx:alpine Up 0.0.0.0:8080->80/tcpLaravel プロジェクトの作成
コンテナが起動したら、app コンテナ内で Laravel プロジェクトを作成します。
docker compose exec app composer create-project laravel/laravel .データベース接続設定
Laravel の .env ファイルを編集して、MySQL に接続できるようにします。
docker compose exec app sh -c "sed -i 's/DB_CONNECTION=sqlite/DB_CONNECTION=mysql/' .env && sed -i 's/# DB_HOST=127.0.0.1/DB_HOST=db/' .env && sed -i 's/# DB_PORT=3306/DB_PORT=3306/' .env && sed -i 's/# DB_DATABASE=laravel/DB_DATABASE=admin_v2/' .env && sed -i 's/# DB_USERNAME=root/DB_USERNAME=laravel/' .env && sed -i 's/# DB_PASSWORD=/DB_PASSWORD=secret/' .env"設定キャッシュをクリアして、マイグレーションを実行します。
docker compose exec app php artisan config:clear
docker compose exec app php artisan migrate動作確認
ブラウザで以下の URL にアクセスします。
| URL | 内容 |
|---|---|
| http://localhost:8080 | Laravel アプリ |
| http://localhost:8081 | phpMyAdmin |
Laravel のウェルカムページが表示されれば、環境構築は完了です!
phpMyAdmin ログイン情報
- ユーザー名: root
- パスワード: root
または
- ユーザー名: laravel
- パスワード: secret
- データベース: admin_v2
よく使うコマンド集
開発中によく使うコマンドをまとめておきます。
# コンテナ起動
docker compose up -d
# コンテナ停止
docker compose down
# ログ確認
docker compose logs -f
# app コンテナに入る
docker compose exec app sh
# Artisan コマンド
docker compose exec app php artisan migrate
docker compose exec app php artisan make:controller XxxController
docker compose exec app php artisan make:model Xxx -m
# Composer
docker compose exec app composer install
docker compose exec app composer require パッケージ名
# キャッシュクリア
docker compose exec app php artisan cache:clear
docker compose exec app php artisan config:clear
docker compose exec app php artisan view:clear
# データベースバックアップ
docker compose exec db mysqldump -u root -proot admin_v2 > backup.sqlまとめ
この記事では、AWS(EC2 + RDS)からローカル Docker 環境への移行手順を解説しました。
構築した環境
- Laravel 11 + PHP 8.3
- MySQL 8.4(LTS:2032年までサポート)
- nginx + phpMyAdmin
- Docker Compose で一括管理
ローカル Docker 環境のメリット
- コストゼロ – AWS の月額費用が不要
- 運用の手間なし – サーバー管理から解放
- 環境の再現性 – docker-compose.yml があればどこでも同じ環境
- 高速な開発 – デプロイ不要で即座に反映
個人開発や学習用途であれば、ローカル Docker 環境は非常におすすめです。
外部公開が必要になった場合は、ngrok や Cloudflare Tunnel を使って一時的に公開することも可能です。
ぜひ、この記事を参考に Docker 環境を構築してみてください!
