DockerComposeでLaravelの開発環境構築をやってみる

概要
docker-compose を用いて、Laravel + Nginx + MariaDB の開発環境を構築してみます。
docker-omposeは、docker-compose.yml
というファイルにコンテナの構成情報をまとめて定義することで、同一のホスト上の複数のDockerコンテナを一括管理し連動させることができます。
dockerってなんぞやという方は以前の記事をご覧ください。
使用した環境
- Mac OS
- PHP ー7.4
- Nginx ー1.17
- MariaDB ー10.5
- Laravel ー7. x
環境構築手順
- ディレクトリの作成
- docker-compose.ymlの作成
- nginxの設定
- Dockerfileによるコンテナ作成
- MariaDBの設定
- Laravelのプロジェクト作成
- MariaDBへの接続
1.ディレクトリの構成
最終的なディレクトリ構成は以下のようになっています。
laravel-test
│
├── docker
│ |
│ ├── app
│ │ │
│ │ └── Dockerfile (アプリケーションコンテナの設定ファイル)
│ │
│ └── web
│ |
│ └── default.conf (nginxの設定ファイル)
│
├── db-data
│
├── LaravelProject
│
└── docker-compose.yml
上記のLaravelProjectにLaravelのファイルが生成されます。
2.docker-compose.ymlを作成
docker-compose.ymlに、システム内で稼働する複数のサーバ群の構成をまとめて定義します。
docker-compose.yml
に記述
version: '3' # Dockerのバージョン
services:
web: # WEBサーバのコンテナの設定
container_name: nginx.test # コンテナの名前を決める
image: nginx:latest # phpのイメージを利用
ports: # ポート設定 今回は8000番ポートで接続
- "8000:80"
volumes: # 開発ディレクトリと公開ディレクトリをマウント(共有)
- ./docker/web/default.conf:/etc/nginx/conf.d/default.conf
- .:/var/www/html
depends_on:
- app # webコンテナとappコンテナを連携
app: # アプリケーションサーバのコンテナの設定
container_name: laravel.test # コンテナの名前を決める
build: ./docker/app # ./docker/appの Dockerfileから構築
volumes: # 開発ディレクトリと公開ディレクトリをマウント(共有)
- .:/var/www/html
3.nginxの設定
ここではnginxを使用できるように設定していきます。
default.conf
に記述
server {
# nghinxポート番号を設定
listen 80;
# サーバのルートディレクトリを指定
root /var/www/html/LaravelProject/public;
index index.php index.htm;
# アクセスログ・エラーログの出力先パスを指定
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
# 全てのリクエストをLaravelに送るための設定
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass app:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
4.Dockerfileによるコンテナ作成
ここではappコンテナ構築時に使われるDockerfileを設定していきます。
docker/app/Dockerfile
に記述
# phpのイメージを利用
FROM php:7.4-fpm
# composerをインストール
RUN cd /usr/bin && curl -s http://getcomposer.org/installer | php && ln -s /usr/bin/composer.phar /usr/bin/composer
RUN apt-get update \
&& apt-get install -y \
git \
zip \
unzip \
vim
RUN apt-get update \
&& apt-get install -y libpq-dev \
&& docker-php-ext-install pdo_mysql pdo_pgsql
WORKDIR /var/www/html
5.MariaDBの設定
ここではMariaDBの設定をしていきます。 MariaDBはMySQLと仕様がほとんど同じなので設定も同様に行えます。
docker-compose.yml
に追記
version: '3'
#....省略
app:
container_name: laravel.test
build: ./docker/app
volumes:
- .:/var/www/html
#ここに追記
mariadb: # DBサーバのコンテナの設定
container_name: mariadb.test # コンテナの名前を決める
image: mariadb:latest # mariaDBのイメージを利用
ports: # ポート設定 (3306がデフォルト)
- 3306:3306
environment: # DBの環境設定
MYSQL_ROOT_PASSWORD: root
MYSQL_USER: test
MYSQL_PASSWORD: test
MYSQL_DATABASE: testdb
volumes: # 開発ディレクトリと公開ディレクトリをマウント(共有)
- ./db-data:/var/lib/mysql
6.LaravelProjectの作成
ここまでのファイルを作り終えた後、Dockerを動かして実際にLaravelをインストールしていきます。
dockerで起動
$ docker-compose up -d
appコンテナに入る
$ docker exec -it laravel.test bash
Laravelプロジェクト作成
$ /var/www/html # composer create-project --prefer-dist laravel/laravel LaravelProject
http://localhost:8000に接続して以下の画面が出力されるか確認します。

7.MariaDBへの接続
LaravelProject/.env
を編集し、mariadbコンテナの内容を記述
DB_CONNECTION=mysql
DB_HOST=mariadb
DB_PORT=3306
DB_DATABASE=testdb
DB_USERNAME=test
DB_PASSWORD=test
appコンテナに入り、マイグレーション実行を行う
$ docker exec -it laravel.test bash
$ /var/www/html # cd LaravelProject
$ /var/www/html/LaravelProject # php artisan migrate
Migration table created successfully.
という表示ができれば成功です。
まとめ
docker-composeを使いこなすことができればどんな環境でも容易に作ることができると分かりました。今後は、Nuxt.jsなどの環境開発にも挑戦したいと思います。