こんにちは!たくお(@TB_IQ)です。
docker-composeでLaravelの開発環境を構築する方法を紹介します。
スポンサーリンク
コンテンツ
ディレクトリ構成 / 必要なファイル
ディレクトリ構成
ディレクトリ構成は以下です。
.
├── compose.yaml
├── docker
│ ├── nginx
│ │ ├── Dockerfile
│ │ └── default.conf
│ ├── node
│ │ └── Dockerfile
│ └── php
│ ├── Dockerfile
│ └── php.ini
└── html
dockerディレクトリ内のファイル
各ファイルの内容は以下です。
compose.yaml
services:
# Nginx
nginx:
container_name: example-nginx
build: ./docker/nginx
ports:
- "80:80"
volumes:
- ./html:/usr/share/nginx/html
depends_on:
- php
# PHP
php:
container_name: example-php
build: ./docker/php
volumes:
- ./html:/usr/share/nginx/html
# Database (MariaDB 10.10.2)
mariadb:
container_name: example-db
image: mariadb:10.10.2
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: example-db
MYSQL_USER: docker
MYSQL_PASSWORD: docker
TZ: 'Asia/Tokyo'
command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
volumes:
- ./docker/mariadb/data:/var/lib/mysql
- ./docker/mariadb/my.cnf:/etc/mysql/conf.d/my.cnf
ports:
- "3306:3306"
# composer
composer:
container_name: example-composer
image: composer:2
command: composer install -o
volumes:
- ./html:/usr/share/nginx/html:delegated
working_dir: /usr/share/nginx/html
# node (npm)
node:
container_name: example-node
build: ./docker/node
volumes:
- ./html:/usr/share/nginx/html:delegated
working_dir: /usr/share/nginx/html
nginx/Dockerfile
FROM nginx:1.28
# nginxの設定ファイルをコピー
COPY default.conf /etc/nginx/conf.d/default.conf
nginx/default.conf
server {
listen 80;
listen [::]:80;
server_name localhost;
#access_log /var/log/nginx/host.access.log main;
location / {
root /usr/share/nginx/html/public;
index index.php;
try_files $uri $uri/ /index.php?$query_string;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
root /usr/share/nginx/html/public;
fastcgi_pass php:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
php/Dockerfile
FROM php:8-fpm
# PDO を使えるようにする設定
RUN apt-get update
RUN apt-get install zip unzip
RUN docker-php-ext-install pdo_mysql
WORKDIR /usr/share/nginx/html
COPY php.ini /usr/local/etc/php
php/php.ini
date.timezone = "Asia/Tokyo"
# 以下はファイルのアップ等をするなら必要
memory_limit = 10G
post_max_size = 10G
upload_max_filesize = 10G
node/Dockerfile
FROM node:22.16.0-alpine
初回LaravelのWelcomeページを表示するまでの作業手順
docker-composeビルド
docker compose up -d
composerでLaravelプロジェクト作成
docker compose run --rm composer composer create-project laravel/laravel example-laravel
Laravelファイルを1つ上の階層へ移動
cd html/example-laravel # Laravelプロジェクトのディレクトリに移動
mv * ../
mv .* ../ # 上記コマンドでは.envファイルが移動しないためこの行も実行してください
cd ../ # /htmlに移動
rm -rf example-laravel # example-laravelを削除
composerインストール実行
docker compose run --rm composer composer install

これでhttp://localhostにアクセスするとLaravelのウェルカムページが表示されますが、データベースがSqliteのままですので、MariaDBに変更します。
.env
を以下のように修正します。
DB_CONNECTION=sqlite
# DB_HOST=127.0.0.1
# DB_PORT=3306
# DB_DATABASE=laravel
# DB_USERNAME=root
# DB_PASSWORD=
↓
DB_CONNECTION=mysql
DB_HOST=example-db
DB_PORT=3306
DB_DATABASE=example-db
DB_USERNAME=docker
DB_PASSWORD=docker
以下コマンドで.envの内容を反映し、マイグレーションを実施します。
docker compose exec php php artisan config:cache
docker compose exec php php artisan migrate:fresh --seed
npm installも忘れず実行しておきましょう。
docker compose run --rm node npm install
スポンサーリンク
おわりに
普段、私が使用しているLaravelの開発環境の作り方について解説しました。
もし上手く動かないなどありましたら、X経由でDM送って頂いても良いですし、お問い合わせフォームからお問い合わせください。
というわけで次回もよしなに!