Docker ComposeでLaravel開発環境を構築する理由
Laravel開発で「ローカル環境でPHPのバージョンが違う」「チームメンバーと同じ環境が作れない」という経験はありませんか?Docker Composeを使えば、誰でも同じ開発環境を数分で構築できます。
この記事では、Docker ComposeでLaravel開発環境を構築する実践的な手順を解説します。PHP、Nginx、MySQLを含む完全な開発環境を3ステップで作成できます。
Docker Composeを使うメリット
- 環境構築のコマンドが1つで完結
- チーム全員が同じ環境で開発できる
- 開発環境の削除・再構築が簡単
- 本番環境との差異を最小化できる

事前準備:必要なツールのインストール
Laravel開発環境を構築する前に、以下のツールをインストールしておきましょう。
Docker Desktopのインストール
Docker DesktopにはDocker Composeがバンドルされているため、これをインストールするだけでOKです。
- Windows/Mac: Docker Desktop公式サイトからダウンロード
- Linux: 各ディストリビューションのパッケージマネージャーでインストール
インストール後、以下のコマンドでバージョン確認ができればOKです。
docker --version
docker-compose --versionステップ1: プロジェクトディレクトリとDocker設定ファイルの作成
まず、Laravel開発環境用のディレクトリ構造を作成します。
ディレクトリ構成
mkdir laravel-docker-app
cd laravel-docker-app
mkdir docker
mkdir docker/nginx
mkdir docker/php最終的なディレクトリ構造は以下のようになります。
laravel-docker-app/
├── docker/
│ ├── nginx/
│ │ └── default.conf
│ └── php/
│ └── Dockerfile
├── src/ # Laravelプロジェクトがここに配置される
└── docker-compose.ymldocker-compose.ymlの作成
プロジェクトルートにdocker-compose.ymlを作成します。これがDocker Composeの設定ファイルです。
version: '3.8'
services:
app:
build:
context: ./docker/php
dockerfile: Dockerfile
volumes:
- ./src:/var/www/html
working_dir: /var/www/html
depends_on:
- db
web:
image: nginx:1.25-alpine
ports:
- "8080:80"
volumes:
- ./src:/var/www/html
- ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf
depends_on:
- app
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: laravel
MYSQL_USER: laravel
MYSQL_PASSWORD: secret
ports:
- "3306:3306"
volumes:
- db-data:/var/lib/mysql
volumes:
db-data:PHP用Dockerfileの作成
docker/php/Dockerfileを作成し、Laravel実行に必要なPHP環境を定義します。
FROM php:8.2-fpm
# システムパッケージのインストール
RUN apt-get update && apt-get install -y \
git \
curl \
zip \
unzip
# PHP拡張機能のインストール
RUN docker-php-ext-install pdo pdo_mysql
# Composerのインストール
COPY --from=composer:2 /usr/bin/composer /usr/bin/composer
# 作業ディレクトリの設定
WORKDIR /var/www/htmlNginx設定ファイルの作成
docker/nginx/default.confを作成し、WebサーバーとしてNginxを設定します。
server {
listen 80;
server_name localhost;
root /var/www/html/public;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass app:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}ステップ2: Dockerコンテナの起動とLaravelインストール
設定ファイルの準備が完了したら、実際にコンテナを起動してLaravelをインストールします。
コンテナの起動
docker-compose up -dこのコマンドで3つのコンテナ(app、web、db)がバックグラウンドで起動します。初回は数分かかる場合があります。
Laravelのインストール
appコンテナ内でComposerを使ってLaravelをインストールします。
docker-compose exec app composer create-project --prefer-dist laravel/laravel .インストールが完了すると、src/ディレクトリにLaravelプロジェクトが作成されます。
環境変数の設定
src/.envファイルを開き、データベース接続情報を修正します。
DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=laravel
DB_PASSWORD=secretDB_HOST=dbの部分がポイントです。これはdocker-compose.ymlで定義したサービス名を指定します。
ステップ3: データベースマイグレーションと動作確認
Laravel環境が整ったので、データベースマイグレーションを実行して動作確認をします。
マイグレーションの実行
docker-compose exec app php artisan migrateこのコマンドでLaravelのデフォルトテーブルがMySQLに作成されます。
ブラウザでアクセス
ブラウザでhttp://localhost:8080にアクセスすると、Laravelのウェルカムページが表示されます。
これで、Docker Composeを使ったLaravel開発環境の構築は完了です!
よく使うDocker Composeコマンド
日常的な開発で使うコマンドをまとめておきます。
- コンテナの起動:
docker-compose up -d - コンテナの停止:
docker-compose down - コンテナ内でコマンド実行:
docker-compose exec app [コマンド] - ログの確認:
docker-compose logs -f app - コンテナの再ビルド:
docker-compose build --no-cache
トラブルシューティング:よくあるエラーと対処法
ポート番号の競合エラー
Bind for 0.0.0.0:8080 failed: port is already allocatedというエラーが出る場合、既にポート8080が使用されています。
対処法: docker-compose.ymlのportsセクションを変更します。
web:
ports:
- "8081:80" # 8080から8081に変更データベース接続エラー
SQLSTATE[HY000] [2002] Connection refusedというエラーが出る場合、データベースコンテナが起動していない可能性があります。
対処法: コンテナの状態を確認します。
docker-compose psdbコンテナがUpになっていない場合は、再起動してみましょう。
docker-compose restart dbパーミッションエラー
Laravelのログファイルやキャッシュディレクトリで書き込みエラーが出る場合があります。
対処法: appコンテナ内でパーミッションを設定します。
docker-compose exec app chmod -R 777 storage bootstrap/cache開発効率を上げるカスタマイズ
ホットリロードの設定
フロントエンド開発でViteを使う場合、docker-compose.ymlにポート設定を追加します。
app:
ports:
- "5173:5173" # Vite開発サーバー用Redis追加でキャッシュ高速化
本番環境に近い構成にするため、Redisコンテナを追加できます。
redis:
image: redis:7-alpine
ports:
- "6379:6379".envファイルでRedis接続情報を設定すれば、キャッシュ・セッション管理が高速化されます。
まとめ:Docker ComposeでLaravel開発環境を統一しよう
Docker ComposeでLaravel開発環境を構築する方法を解説しました。この構成により、チーム全員が同じ環境で開発できるだけでなく、新メンバーのオンボーディングも数分で完了します。
構築手順をまとめると以下の通りです。
- docker-compose.ymlと各種設定ファイルを作成
- コンテナを起動してLaravelをインストール
- マイグレーション実行とブラウザで動作確認
この環境をベースに、必要に応じてRedisやMailHogなどを追加してカスタマイズしていきましょう。
Laravel開発をさらに効率化する関連記事
Docker Composeで環境構築ができたら、次はデプロイ先の選定やフレームワーク選択について理解を深めましょう。
デプロイ・インフラ関連
- VercelとRenderの選び方。Next.js?Nest.js?React+Vite?フレームワーク別の選択基準 – Laravel環境をどこにデプロイするか迷った時の判断材料に
- FirebaseとSupabaseの違いは?使い分けに迷ったら読む記事! – バックエンドサービスとの連携を考える際に参考になります
フレームワーク・技術選定
- スクールでLaravel習ったけど実際どの言語がよく使われてるの?現場の実態を解説 – Laravel学習後のキャリアパスを考える際の参考に
- Next.jsとVercelならサーバーいらない?サーバーレスの仕組みを解説 – フロントエンドとバックエンドの分離について理解を深められます
開発ワークフロー
- Git フィーチャーブランチワークフロー、実はいらない??チーム開発での正しい使い分けと実践パターン – Docker環境を使ったチーム開発でのGit運用の参考に
- Faker.js (Faker.ts)って便利やで。テストデータ生成の実践活用法 – Laravel開発でテストデータを効率的に作成する方法
