Laravel+Docker環境

はじめに

Laravel環境をDockerを使って構築してみたので、そのご紹介をします。
環境はweb、app、dbと、メールも使用したかったのでsmtpを用意したいと思います。
今回の環境はこちらになります。急ぎの方はファイルをダウンロードしてご利用ください。

環境構成

# app ver
1 Apache 2.4.38
2 MariaDB 5.5
3 PHP 7.4
4 Laravel 6.20.16
5 MailHog latest

ディレクトリ構成

各ファイルはこれから作成していきますが、
まずはディレクトリを下記のように作成します。

.
├── docker
│ ├── app
│ │ ├── 000-default.conf ・・・ Apacheの設定ファイル、ドキュメントルートを設定する
│ │ ├── Dockerfile
│ │ └── php.ini ・・・ PHPの設定ファイル
│ └── db ・・・ 必要であれば、sqlファイルを配置
├── src ・・・ ここにソースを配置
├── docker-compose.yml
└── Makefile

000-default.conf

では、まずはApacheの設定ファイルを下記のように作成します。
コンテナ内の/var/www/html/webapp/publicをドキュメントルートとする設定をここでは書いています。

php.ini

次は、PHPの設定ファイルです。
タイムゾーンと文字コード、言語設定を行っています。
必要に応じて、設定を書き加えてください。

Dockerfile

次に、Apache+PHP+LaravelのDockerイメージを作成するため、Dockerfileを作成していきます。
ここでは、先ほど作成したApacheとPHPの設定ファイルを読み込みます。
Dockerイメージは、php:7.4-apacheを使用します。

少しだけ説明します。
Laravelを使用するためには、composerと呼ばれるPHPのパッケージ管理システムをインストールする必要があります。
公式の手順はこちらです。この手順に従うと、以下のようにDockerfileに記載することになります。

その場合、ハッシュ値が変更される度に、Dockerfileも変更する必要があります。
そこで、dockerのマルチステータスビルドの機能を使って、composerのイメージから必要な部分のみをコピーしてきます。
そうすることで、シンプルにでき、イメージサイズも抑えることができます。

docker-compose.yml

あとは、docker-composeを使って、複数のコンテナを作っていきます。
Laravelコンテナは先ほど作成したDockerfileを利用します。
Laravelコンテナ以外は、mariadb、phpmyadmin、mailhogのコンテナを作成します。

Makefile

ここまで、作ったら、あとはビルドしていくだけですが、
長いコマンドを何度も打つのは大変なので、Makefileを作っておきます。
コマンド名は好みに合わせて変更してください。

projectのコマンドで、Laravelのプロジェクトを作成しています。
バージョンの指定や、プロジェクト名をwebappというものに指定しています。

ビルド

では、実際、ビルドしていきます。
Makefileを作ったので、簡単にビルドができるはずです。

  1. make buildでイメージを作成します。
  2. make upでコンテナを起動します。
  3. make projectでLaravelプロジェクトを作成します。
  4. http://localhost:8080 に接続するとLaravelのWelcomeページが表示されます。

ここまでできたら、Laravel環境は構築できているので、
あとはsrcディレクトリ内を編集すれば、自分のLaravelアプリができるはずです。

コンテナの停止は、make stopで、
Laravelのコンテナ内にログインする場合は、make loginを使います。

さいごに

dockerを使うことで、簡単にLaravel環境を作ることができましたね。
次回は、Laravelの使い方を紹介したいと思います。