このページでは、Laravel開発環境をDockerで構築する際に使用する主要な設定ファイルについて解説します。
Dockerを使うことで、OSやツールの違いによる環境差をなくし、誰でも同じ状態で開発・動作確認ができるようになります。
対象となるファイルは、PHP・MySQL・Nginxそれぞれのサービスに関連する設定ファイル(Dockerfile, php.ini, my.cnf, default.conf)と、全体を統括する docker-compose.yml です。
これらのファイルは、単にコンテナを起動するだけでなく、開発効率や動作の安定性、セキュリティ、拡張性にも関わる重要な役割を担っています。
これらのファイルがどのような役割を持ち、どこを調整すればよいのかを理解することで、より柔軟で安定した開発環境を構築できるようになります。
ファイル一覧と役割
Laravelの開発環境をDockerで構築する際には、複数の設定ファイルが連携して動作します。
以下ではそれぞれのファイルがどのサービスに属し、どのような役割を持っているかを整理します。
| ファイル名 | 所属サービス | 役割概要 |
|---|---|---|
| docker-compose.yml | 全体 | 各サービス(PHP, MySQL, Nginx)の定義と連携設定を行うファイル |
| php/Dockerfile | PHP | PHP環境の構築。Laravel実行に必要なモジュールやツールを導入 |
| php/php.ini | PHP | PHPの設定ファイル。メモリ制限やタイムゾーンなどを調整 |
| nginx/default.conf | Nginx | Webサーバーのルーティング設定。ドキュメントルートやリバースプロキシの定義 |
| mysql/my.cnf | MySQL | データベースの設定ファイル。文字コードやバッファサイズなどを調整 |
フォルダの作成箇所
それぞれのファイルは以下のフォルダに作成していきます。
contactform/
├── docker-compose.yml
├── php/
│ ├── Dockerfile
│ └── php.ini
├── nginx/
│ └── default.conf
├── mysql/
│ └── my.cnf
├── .gitignore
└── src
※1 srcフォルダの中にはLaravelのアプリが入ります
※2 contactform内でLarave linstallを行うと、自動的にsrcフォルダが生成されます
各ファイルの説明
ここからは、Dockerを使用する場合に作成すべきファイルについて解説していきます。
php/Dockerfile
このファイルは、Laravelアプリケーションを動かすための PHP実行環境を構築するレシピです。
Laravelが依存するPHPモジュールやツール(composerなど)をインストールし、開発に適した環境を整えます。
# バージョン 8.3 のPHPをインストールしています
FROM php:8.3-fpm
# 必要なパッケージとPHP拡張モジュールのみインストール
RUN apt-get update && apt-get install -y \
unzip libzip-dev \
&& docker-php-ext-install pdo_mysql zip mbstring
# Composerのインストール(公式推奨の方法)
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
# php.ini を配置(任意)
COPY php.ini /usr/local/etc/php/
# 作業ディレクトリの設定
WORKDIR /var/www
# 権限調整(Laravelのstorageなどで必要)
RUN chown -R www-data:www-data /var/www
php/php.ini
php.iniは主に「PHPの動作を制御する設定ファイル」となっています。
今回は最小構成となっています。
date.timezone = "Asia/Tokyo"
[mbstring]
default_charset = "UTF-8"
mbstring.language = Japanese
mbstring.detect_order = UTF-8,SJIS,EUC-JP
nginx/default.conf
このファイルは、Nginx コンテナ内の仮想ホスト設定ファイルであり、ブラウザから送られてくるリクエストをどこにどう届けるかを定義します。
LaravelをPHP-FPM経由で実行するため、リバースプロキシやドキュメントルートの指定が含まれます。
server {
# リクエストを受け取るポート番号の設定。ポート番号 80 番 を指定。
listen 80;
# サーバ名の設定。localhostを指定。
server_name localhost;
# インデックスとして使用するファイルの設定。index.phpとindex.htmlを指定。
index index.php index.html;
# ドキュメントルートの設定。/var/www/publicを指定。
root /var/www/public;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
# URI のパス毎の設定。/と~ \.php(それ以外)の時の指定をしている
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass php:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
mysql/my.cnf
このファイルは、MySQL(またはMariaDB)の動作全般を制御する設定ファイルです。
LaravelはDBとの連携が非常に重要なので、my.cnf を適切に設定することで、開発時の安定性や日本語データの整合性が高まります。
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
[client]
default-character-set = utf8mb4
docker-compose.yml の役割
- 複数のコンテナ(サービス)を同時に定義・起動・連携するためのファイル
- サービスのビルド設定、ネットワーク、ボリューム、環境変数などを一括管理
- 開発環境の再現性やチームでの統一運用を実現
🔍 Laravel構成の例(最小構成)
version: '3.8'
services:
php:
build:
context: ./php
volumes:
- .:/var/www
depends_on:
- mysql
nginx:
image: nginx:stable
volumes:
- .:/var/www
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf
ports:
- "8080:80"
depends_on:
- php
mysql:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: laravel
MYSQL_USER: laravel
MYSQL_PASSWORD: laravel
volumes:
- db-data:/var/lib/mysql
- ./mysql/my.cnf:/etc/mysql/conf.d/my.cnf
volumes:
db-data:
🧠 設定ポイント解説
| セクション | 内容 |
|---|---|
services |
コンテナごとに定義(PHP・Nginx・MySQL) |
build.context |
PHPサービスのビルド元フォルダ(Dockerfileのある場所) |
volumes |
ホストとコンテナ間のディレクトリ共有。Laravelコードをマウント |
depends_on |
起動順の制御。PHPはMySQLより後に起動、NginxはPHPより後に起動 |
ports |
外部アクセス用ポート設定。localhost:8080 でアプリにアクセス可能 |
environment |
MySQLの初期設定(DB名、ユーザー、パスワード) |
volumes: |
名前付きボリューム。DBの永続化領域を定義 |
✅ 教育目的におけるメリット
- 全体構成が明示的で、各サービスがどう連携するかを直感的に理解できる
- Laravelのコア機能に絞った最小構成なので、学習に集中できる
.envファイルの内容と連携することで、環境変数の理解も深まる