目次
はじめに
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
をドキュメントルートとする設定をここでは書いています。
1 2 3 4 5 6 7 8 9 |
<VirtualHost *:80> ServerAdmin webmaster@localhost DocumentRoot /var/www/html/webapp/public ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined <Directory /var/www/html/webapp/public> AllowOverride All </Directory> </VirtualHost> |
php.ini
次は、PHPの設定ファイルです。
タイムゾーンと文字コード、言語設定を行っています。
必要に応じて、設定を書き加えてください。
1 2 3 4 5 |
[Date] date.timezone = "Asia/Tokyo" [mbstring] mbstring.internal_encoding = "UTF-8" mbstring.language = "Japanese" |
Dockerfile
次に、Apache+PHP+LaravelのDockerイメージを作成するため、Dockerfileを作成していきます。
ここでは、先ほど作成したApacheとPHPの設定ファイルを読み込みます。
Dockerイメージは、php:7.4-apache
を使用します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
FROM php:7.4-apache #Composerのインストール COPY --from=composer /usr/bin/composer /usr/bin/composer # ミドルウェアのインストール RUN apt-get update \ && apt-get install -y \ git \ zip \ unzip \ vim \ libpng-dev \ libpq-dev \ && docker-php-ext-install pdo_mysql # 設定ファイルの読み込み COPY php.ini /usr/local/etc/php/ COPY 000-default.conf /etc/apache2/sites-enabled/ |
少しだけ説明します。
Laravelを使用するためには、composer
と呼ばれるPHPのパッケージ管理システムをインストールする必要があります。
公式の手順はこちらです。この手順に従うと、以下のようにDockerfileに記載することになります。
1 2 3 4 |
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" php -r "if (hash_file('sha384', 'composer-setup.php') === '756890a4488ce9024fc62c56153228907f1545c228516cbf63f885e036d37e9a59d27d63f46af1d4d07ee0f76181c7d3') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;" php composer-setup.php php -r "unlink('composer-setup.php');" |
その場合、ハッシュ値が変更される度に、Dockerfileも変更する必要があります。
そこで、dockerのマルチステータスビルドの機能を使って、composer
のイメージから必要な部分のみをコピーしてきます。
そうすることで、シンプルにでき、イメージサイズも抑えることができます。
1 |
COPY --from=composer /usr/bin/composer /usr/bin/composer |
docker-compose.yml
あとは、docker-composeを使って、複数のコンテナを作っていきます。
Laravelコンテナは先ほど作成したDockerfileを利用します。
Laravelコンテナ以外は、mariadb、phpmyadmin、mailhogのコンテナを作成します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
version: '3' services: # laravel app: build: ./docker/app container_name: web_app ports: - 8080:80 volumes: - ./src:/var/www/html # mariadb db: image: mariadb:5.5 container_name: web_db environment: - MYSQL_ROOT_PASSWORD=password - MYSQL_DATABASE=webapp ports: - 3306:3306 volumes: - ./docker/db:/var/lib/mariadb - ./docker/db:/docker-entrypoint-initdb.d # phpMyAdmin phpmyadmin: image: phpmyadmin/phpmyadmin container_name: web_phpmyadmin environment: - PMA_ARBITRARY=1 - PMA_HOST=db - PMA_USER=root - PMA_PASSWORD=password ports: - 8081:80 # mailhog mailhog: container_name: web_smtp image: mailhog/mailhog ports: - 8025:8025 - 1025:1025 |
Makefile
ここまで、作ったら、あとはビルドしていくだけですが、
長いコマンドを何度も打つのは大変なので、Makefile
を作っておきます。
コマンド名は好みに合わせて変更してください。
project
のコマンドで、Laravelのプロジェクトを作成しています。
バージョンの指定や、プロジェクト名をwebapp
というものに指定しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
.PHONY: build up stop down show NAME=web_app VERSION=1.0 #imageの作成 build: docker-compose build #起動 up: docker-compose up -d #停止 stop: docker-compose stop #削除 down: docker-compose down --volumes #コンテナ一覧 show: docker container ls -a #イメージの削除 rmi: docker image prune #Laravelプロジェクトの作成 project: docker exec $(NAME) composer create-project "laravel/laravel=~6.0" --prefer-dist webapp #Laravel環境へのログイン login: docker exec -it $(NAME) /bin/bash |
ビルド
では、実際、ビルドしていきます。
Makefile
を作ったので、簡単にビルドができるはずです。
make build
でイメージを作成します。make up
でコンテナを起動します。make project
でLaravelプロジェクトを作成します。- http://localhost:8080 に接続するとLaravelのWelcomeページが表示されます。
ここまでできたら、Laravel環境は構築できているので、
あとはsrc
ディレクトリ内を編集すれば、自分のLaravelアプリができるはずです。
コンテナの停止は、make stop
で、
Laravelのコンテナ内にログインする場合は、make login
を使います。
さいごに
dockerを使うことで、簡単にLaravel環境を作ることができましたね。
次回は、Laravelの使い方を紹介したいと思います。