Contents
DockerとLaravelの連携による開発環境構築の意義
Laravel開発を始める際、伝統的な方法ではPHPやMySQLなどの環境設定に手間がかかるため、初心者にとってハードルが高いのが現状です。一方でDockerを使うことで、依存関係管理や環境の一貫性確保といった課題を解決でき、開発効率が飛躍的に向上します。本記事では、LaravelとDockerの連携による環境構築の意義を解説し、具体的な手順をステップバイステップで紹介します。
伝統的な環境構築との比較
伝統的な方法では、PHPやMySQLを個別にインストール・設定する必要がありますが、Dockerを使うとこれらのコンテナイメージを簡単に利用できる点が最大の違いです。以下に比較表で示します。
| 項目 | 傳統的環境構築 | Docker環境構築 |
|---|---|---|
| 依存関係管理 | 手動設定が必要でエラー発生率が高い | イメージベースで一貫性が保たれる |
| 環境の一貫性 | マシンごとに差異が出る | コンテナイメージの再現性により安定 |
| 構築時間 | 数時間かかる場合も | 5分以内で完了可能 |
Docker導入のメリット
Dockerは、開発者間での環境共有を容易にし、ローカルと本番環境のズレを防ぐ効果があります。また、複数プロジェクトを並行して管理できるため、チーム開発にも最適です。このように、Docker導入は現代的な開発フローにおいて不可欠な技術となっています。
- 例1: ローカルPCでLaravel開発→本番環境に移す際の設定ミスを防止
- 例2: 新規メンバーが同じ環境で作業しやすくなる(Dockerコンテナの再現性)
- 例3: サーバー構成とローカル環境を一致させたテストが可能になる
Dockerのインストール手順(OS別対応)
Dockerを導入する際には、使用しているOSに応じて手順が異なります。それぞれのOSでの具体的なインストール方法と確認手順を紹介します。
Windows版Docker Desktopの導入
Windowsでは公式サイトからDocker Desktop for Windowsをダウンロードし、インストーラーを実行してください。インストール後、Dockerデスクトップアプリを起動し、WSL2が有効化されているか確認します。
- https://www.docker.com/products/docker-desktop からダウンロード
- インストーラーを実行し、インストール完了
- Docker Desktopアプリを開き、「WSL2 Integration」が有効になっているか確認
注意: Windowsの場合、WSL2が有効化されていないとDockerが正常に動作しません。有効化方法はMicrosoft公式ドキュメントを参照してください。
macOSでのDocker Engine設定
macOSではDocker Desktop for Macをダウンロードしてインストールします。このアプリは仮想マシンとしてDocker Engineを動作させます。
- https://www.docker.com/products/docker-desktop からmacOS版をダウンロード
- インストーラーを実行し、起動
- ターミナルで
docker --versionを入力してバージョン確認
事後確認ステップ: macOSでは、
docker run hello-worldを実行し、Dockerエンジンの動作を確認してください。
Linux(Ubuntu例)の手動インストール
LinuxではコマンドラインからDocker Engineをインストールします。以下が基本的な手順です。
-
パッケージリスト更新:
bash
sudo apt update && sudo apt upgrade -y -
Docker公式GPG鍵の導入とリポジトリ追加:
bash
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null -
インストール:
bash
sudo apt update && sudo apt install docker-ce docker-ce-cli containerd.io -y -
事後確認ステップ: ユーザーに
dockerコマンドを実行する権限を与える必要があります。
bash
sudo usermod -aG docker $USER
newgrp docker -
バージョン確認:
bash
docker --version
docker-compose.ymlファイルの構築と基本構成
DockerでLaravel環境を構築するには、docker-compose.ymlファイルが不可欠です。このファイルではPHP・Nginx・MySQLなどのサービスを定義し、コンテナ起動時の設定を行います。
サービス定義の基本構文
docker-compose.ymlはYAML形式で記述されます。主な要素にはサービス名(service)、イメージ(image)、ポートマッピング(ports)、ボリューム設定(volumes)があります。以下に具体的な例とコメント付きのコードを示します。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
version: '3' services: app: build: . volumes: - .:/var/www/html # ホストマシンのプロジェクトディレクトリをコンテナ内にマウント depends_on: - db # MySQLサービスが起動後にPHPを起動 web: image: nginx:alpine # アルパインLinuxベースで軽量なNginxを使用 ports: - "8080:80" # ローカルの8080ポートをコンテナの80ポートにマッピング volumes: - ./docker/nginx:/etc/nginx/conf.d # Nginx設定ファイルをホストから読み込む db: image: mysql:8.0 # 最新版MySQLイメージを使用 environment: MYSQL_ROOT_PASSWORD: secret # MySQLのrootパスワードを環境変数で指定 volumes: - db_data:/var/lib/mysql # データ永続化用ボリュームを定義 volumes: db_data: # ボリューム名の定義(永続化用) |
PHP・Nginx・MySQLのイメージ指定例
以下に各サービスで使用するイメージとその特徴を表にまとめます。
| サービス | イメージ | 説明 |
|---|---|---|
| PHP | php:8.1-fpm |
PHP-FPMを使用し、Laravelの処理を効率的に行う(LaravelはFPMが必須) |
| Nginx | nginx:alpine |
ライトウェイトなイメージでWebサーバー機能を提供(軽量性を重視) |
| MySQL | mysql:8.0 |
最新版のMySQLコンテナを使用し、安定性が保証 |
コンテナ環境でのLaravelプロジェクト構築
Docker環境でLaravelを動作させるには、まずプロジェクトの初期化とコンテナとの連携方法を理解する必要があります。
Laravelプロジェクトの初期化
以下のコマンドでLaravelプロジェクトを作成します。
|
1 2 |
laravel new my_laravel_project |
このとき、docker-compose.ymlファイルが存在するディレクトリ内に移動し、プロジェクトフォルダを作成してください。
アプリケーションコンテナとの連携方法
LaravelプロジェクトをDocker環境で起動するには、以下の手順を行います。
docker-compose buildでイメージをビルドdocker-compose up -dでコンテナをバックグラウンドで起動- ブラウザから
http://localhost:8080にアクセスし、Laravelのデフォルトページが表示されるか確認
注意: プロジェクトファイルはホストマシンとコンテナ間でvolume経由で共有しているため、変更を即座に反映できます。
環境変数とデータ共有の設定技法
Laravelでは.envファイルを使って環境変数を管理しますが、Docker環境での対応には特別な設定が必要です。
.envファイルのDocker対応
Docker環境で.envを使用するには、以下の手順を実施します。
- ホストマシンに
.envファイルを作成 docker-compose.ymlファイルに以下を追加:
yaml
volumes:- ./my_laravel_project/.env:/var/www/html/.env
- ./my_laravel_project/.env:/var/www/html/.env
この設定により、コンテナ内とホストマシンで.envファイルが同期されます。
volumeによる永続化ストレージ構成
MySQLのデータを永続化するには、以下のようにボリュームを定義します。
|
1 2 3 4 |
volumes: db_data: driver: local |
この設定により、コンテナ停止後でもデータが保存され、再起動時に自動復元されます。
よく発生するエラーと回避策
Docker環境構築ではいくつかの典型的なエラーに遭遇しますが、それらを適切に対処すればスムーズに進みます。
ポート競合時の対処
ポートが既に使用されている場合、docker-compose up時に以下のエラーが出ることがあります:
|
1 2 |
ERROR: Port 80 is already allocated |
この場合は、docker-compose.ymlのports設定で別のポートを指定してください。例: "8081:80"。
権限不足エラーメッセージの読み方
MySQLコンテナ起動時に権限不足のエラーが出る場合、以下のようなログが表示されます:
|
1 2 |
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) |
この場合は、docker-compose.ymlでMySQLの環境変数を正しく設定し、volumesにデータディレクトリをマウントしているか確認してください。
デバッグ方法:
bash
docker logs my_laravel_project_db_1
- DockerとLaravelの連携で環境の一貫性が保たれる
- OSごとに最適なDocker導入手順がある
docker-compose.ymlを正しく設定することでコンテナ構築が容易になる- 環境変数とボリュームの設定は開発効率に大きく影響する
記事内の手順を1つずつ実践しながら、DockerとLaravelの連携を理解してください。実装中に疑問があればコメント欄で質問ください。