本記事ではLaradockを使わずにできるだけシンプルにLaravelの環境構築を行っていきます。
任意の場所にディレクトリを作成
$ mkdir myproject
$ cd myproject
docker-compose.ymlファイルの作成
docker-compose.yml
version: '3.7'
services:
php:
build:
context: .
dockerfile: Dockerfile
container_name: php
volumes:
- ./src:/var/www/html
ports:
- "9000:9000"
mysql:
image: mysql:5.7
container_name: mysql
ports:
- "3306:3306"
volumes:
- ./db:/var/lib/mysql
- ./my_conf:/etc/mysql/conf.d
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: laravel
nginx:
image: nginx:stable-alpine
container_name: nginx
ports:
- "8080:80"
volumes:
- ./src:/var/www/html
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf
depends_on:
- php
- mysql
Dockerfileの作成
Dockerfile
FROM php:7.4-fpm-alpine
RUN docker-php-ext-install pdo pdo_mysql
Volumesの作成
$ mkdir db
$ mkdir my_conf
my_confディレクトリにmysql5.7.cnfを作成し、日本語対応できるように文字コードの設定を行います。
mysql5.7.cnf
[mysqld]
character-set-server=utf8mb4
[client]
default-character-set=utf8mb4
Nginxの設定ファイルを作成
$ mkdir nginx
nginxディレクトリにdefault.confを作成します。
default.conf
server {
listen 80;
index index.php index.html;
server_name localhost;
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
root /var/www/html/public;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
try_files $uri = 404;
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;
}
}
コンテナの作成
$ docker-compose up -d
コンテナのステータスを確認
$ docker-compose ps -a
Laravelのインストール
$ docker run --rm -v /src:/app composer create-project --prefer-dist laravel/laravel .
データベースへの接続
srcディレクトリ内にある.envファイルを下記の通り編集してください。
.env
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=password
.envファイルの設定が終わったら、下記のコマンドを実行してデータベースにテーブルが作成されるか確認します。
$ docker-compose exec php php artisan migrate
開発サーバの起動
$ docker exec -it php php artisan serve --host=0.0.0.0 --port=8000
上記のコマンドを実行後、ブラウザで127.0.0.1:8080にアクセスするとLaravelのスタートページが表示されます。
これでLaravelにNginx経由でアクセスし、MySQLデータベースへのデータの登録まで行えることを確認しました。

