Docker ComposeでLaravel開発環境を構築する方法!3ステップで完成する実践ガイド

目次

Docker ComposeでLaravel開発環境を構築する理由

Laravel開発で「ローカル環境でPHPのバージョンが違う」「チームメンバーと同じ環境が作れない」という経験はありませんか?Docker Composeを使えば、誰でも同じ開発環境を数分で構築できます

この記事では、Docker ComposeでLaravel開発環境を構築する実践的な手順を解説します。PHP、Nginx、MySQLを含む完全な開発環境を3ステップで作成できます。

Docker Composeを使うメリット

  • 環境構築のコマンドが1つで完結
  • チーム全員が同じ環境で開発できる
  • 開発環境の削除・再構築が簡単
  • 本番環境との差異を最小化できる
Docker
Docker: Accelerated Container Application Development Docker is a platform designed to help developers build, share, and run container applications. We handle the tedious setup, so you can focus on the code.

事前準備:必要なツールのインストール

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.yml

docker-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/html

Nginx設定ファイルの作成

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=secret

DB_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 ps

dbコンテナが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開発環境を構築する方法を解説しました。この構成により、チーム全員が同じ環境で開発できるだけでなく、新メンバーのオンボーディングも数分で完了します。

構築手順をまとめると以下の通りです。

  1. docker-compose.ymlと各種設定ファイルを作成
  2. コンテナを起動してLaravelをインストール
  3. マイグレーション実行とブラウザで動作確認

この環境をベースに、必要に応じてRedisやMailHogなどを追加してカスタマイズしていきましょう。

Laravel開発をさらに効率化する関連記事

Docker Composeで環境構築ができたら、次はデプロイ先の選定やフレームワーク選択について理解を深めましょう。

デプロイ・インフラ関連

フレームワーク・技術選定

開発ワークフロー

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次