【Laravel】Dockerを使って開発環境を構築する

LaravelはPHPのWebフレームワークの1つでここ数年で人気が高くなってます。私も前職では大変お世話になり多くのシステム開発に利用しました。今回は、Laravelを開発する環境をDockerを使って準備する方法を記事にします。

Laravelとは?

Laravelは、オープンソースのPHPで書かれたWebフルスタックフレームワークです。Artisanコマンドツールを利用する事で「ログイン機能」「データベースのマイグレーション」「コマンド」など自動生成する事ができます。設計も簡易になっているため習得しやすいフレームワークになります。

Dockerを使うメリットは?

Docker社が開発しているコンテナ型の仮想化環境を構築・実行するためのプラットフォームになります。
Dockerを使った場合下記のメリットがあります。

  1. 開発PCの環境を変更しないで済む。
  2. コンテナ単位でPHPやMySQLバージョンを変更できる。
  3. Dockerファイル共有で複数人が同じ環境で開発できる。
  4. プロジェクトを終了後、コンテナ破棄でPCをクリアにできる。

用意される開発環境

2020年4月現在、構築手順をする事で下記開発環境が用意されます。

ソフトバージョン
Nginx1.17.9
PHP7.2.29
MySQL5.7
Laravel7.5.2

※作業手順「4.Laravelインストール」にてバージョンを変更する事ができます。

事前準備

開発環境にはDockerが必要なため事前に準備をお願いします。
2020年4月現在、Docker Desktop はバージョン2.2となっています。

参考 Docker DesktopDocker

開発環境の構築手順

1.開発ディレクトリ、ファイルの準備

開発環境を作成する用のディレクトリを準備して必要ファイルを作成します。下記ディレクトリ構成で準備を進めます。

【任意ディレクトリ】
 └ docker-compose.yml
 └ src
 └ docker
   └ db
   └ nginx
     └ default.conf
   └ php
     └ Dockerfile
     └ php.ini

docker-compose.ymlについて

docker-compose.ymlはDockerコンテナの起動に関する設定等をYAMLにて記述したファイルになります。今回はDB, PHP, NGINXの3つのコンテナを準備します。

version: '3'

services:
  php:
    container_name: php
    build: ./docker/php
    volumes:
      - ./src:/var/www

  nginx:
    image: nginx
    container_name: nginx
    ports:
      - 80:80
    volumes:
      - ./src:/var/www
      - ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf
    depends_on:
      - php

  db:
    image: mysql:5.7
    container_name: db-host
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: database
      MYSQL_USER: docker
      MYSQL_PASSWORD: docker
      TZ: 'Asia/Tokyo'
    command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    volumes:
      - ./docker/db/data:/var/lib/mysql
      - ./docker/db/my.cnf:/etc/mysql/conf.d/my.cnf
      - ./docker/db/sql:/docker-entrypoint-initdb.d
    ports:
      - 3306:3306

docker/nginx/default.confについて

default.confはNGINXコンテナを起動した際に設定されるファイルになります。

server {
  listen 80;
  index  index.php index.html index.htm;
  root /var/www/public;

  location / {
    index  index.php index.html index.htm;
    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/php/Dockerfileについて

Dockerfileはコンテナの構成情報を設定したファイルになります。今回PHPコンテナに対してバージョンや必要なライブラリを指定します。

FROM php:7.2-fpm
COPY php.ini /usr/local/etc/php/

RUN apt-get update \
  && apt-get install -y zlib1g-dev mariadb-client unzip \
  && docker-php-ext-install zip pdo_mysql

COPY --from=composer /usr/bin/composer /usr/bin/composer
ENV COMPOSER_ALLOW_SUPERUSER 1
ENV COMPOSER_HOME /composer
ENV PATH $PATH:/composer/vendor/bin
WORKDIR /var/www
RUN composer global require "laravel/installer"

docker/php/php.iniについて

php.iniはPHPコンテナを起動した際に設定されるファイルになります。

[Date]
date.timezone = "Asia/Tokyo"

[mbstring]
mbstring.internal_encoding = "UTF-8"
mbstring.language = "Japanese"

1.開発ディレクトリ、ファイルの準備 (GitHub)

GitHubに上記環境を準備しました。下記コマンドを利用してください。

cd 【任意ディレクトリ】
git clone https://github.com/todatomohiro/laravel-dev.git
mv ./laravel-dev/* ./

※作業完了後、laravel-devディレクトリは破棄してください。

2.Dockerを起動

ターミナルを利用してdocker-composeコマンドを実行します。
任意ディレクトリまで移動はCDコマンドで移動してください。

cd 【任意ディレクトリ】
docker-compose up -d

3.PHPコンテナにbashで入る

LaravelのインストールをするためPHPコンテナに入ります。
下記コマンドでコンテナに入ることができます。

docker-compose exec php bash

4.Laravelインストール

PHPコンテナの中でLaravelのインストールを行います。
2020年4月現在、Laravel7.5がインストールされます。

[PHPコンテナ] laravel new
他のバージョンをインストールする場合、下記コマンドを入力ください。

●Laravel5.5の場合
rm ./readme.txt
composer create-project "laravel/laravel=5.5.*" ./

●Laravel6の場合
rm ./readme.txt
composer create-project "laravel/laravel=6.*" ./

5.src/.envファイルの修正

Laravelのインストールを行うとsrcフォルダにLaravelが保存されます。src/.envをエディタで開いてデータベース接続設定を変更します。
ホストはDBコンテナを指定するため db-host とします。

DB_CONNECTION=mysql
DB_HOST=db-host
DB_PORT=3306
DB_DATABASE=database
DB_USERNAME=docker
DB_PASSWORD=docker

6.ブラウザで開くか確認

設定が正常にできていると http://localhost にてLaravelの起動画面が表示されます。1度アクセスして表示されるか確認ください。

Laravel起動画面

その他操作

Artisanコマンドを利用

Artisanコマンドを利用する場合、PHPコンテナに入る必要があります。
下記コマンドで実行してください。

cd 【任意ディレクトリ】

# PHPコンテナに入る
docker-compose exec php bash

# PHPコンテナでartisanコマンドを実行
[PHPコンテナ] php artisan list

コンテナの停止・削除について

作成したコンテナの停止・破棄は下記コマンドにて対応できます。

# コンテナの停止
docker-compose stop

# コンテナの停止と削除
docker-compose down

# コンテナの停止&削除(コンテナ・ネットワーク・ボリューム)
docker-compose down -v

まとめ

Dockerを利用したLaravel開発環境の構築をまとめてみました。
LaravelはPHPフレームワークの中で簡単な部類に入りますが、用意されている機能が充実していて大変使いやすくなっています。これからフレームワークを覚える方は勉強も兼ねて是非使ってもらいたいと思います。