Laravel+nginx+php-fpmをdockerで環境構築


はじめに

みなさんこんばんわ。月火水木金土日が出勤日の男nishiharaです。
今回の記事を書く経緯としては、以前から仲良くさせていただいているよっちゃん(@yoshixj)からの依頼だったので、微力ながら参加させていただこうと思い、ここに寄稿させていただきました。
さて、タイトルにもあるように今回は近年日本でも大分本などが出版されて注目度が上がってきたLaravel、そしてみんな大好きDockerという構成で今すぐ簡単なアプリケーションを開発できるようなベースファイルを作成しましたので、それを紹介したいと思います。

今回のプロジェクトにおけるディレクトリ構成は以下のようになっています(参考までに)

Project/
┣ laravel/
┣ mysql/
┣ etc/
└docker-compose.yml
└.env
└.Dockerfile

mysqlフォルダはdocker-compose upで作成したDBを永続化するために作成しています。(mysql/volumesを/var/lib/myqlにマッピング)
etc/ フォルダの中ではnginxの設定とBasic認証用のファイルを格納しています。

docker

今回のプロジェクトにおけるdocker-compose内で定義するミドルウェアの構成としては、nginx、php-fpm,mysqlを選定しました。

では早速docker-compose.ymlファイルを紹介

docker-compose.yml
version: "2"

services:
  nginx:
    image: nginx:alpine
    volumes:
      - ./etc/nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf
      - ./etc/nginx/.htpasswd:/etc/nginx/.htpasswd
      - ./laravel/public:/var/www/laravel/public
    ports:
      - 80:80
    links:
      - phpfpm
    depends_on:
      - phpfpm
  phpfpm:
    build:
      context: .
      dockerfile: ./Dockerfile
    volumes:
      - ./laravel:/var/www/laravel
    links:
      - mysql
    depends_on:
      - mysql
    env_file: .env
  mysql:
    image: mysql:5.7
    env_file: .env
    volumes:
      - ./mysql/volumes:/var/lib/mysql
    ports:
      - 4306:3306

php fpm 用のDocker ファイルは以下のようになっています

Dockerfile

FROM php:7.2-fpm-alpine

RUN docker-php-ext-install pdo_mysql

.envファイルは以下のようになっています(xxxxxの部分は適宜自分で変更してください)

.env

DB_HOST=mysql
DB_DATABASE=xxxxxxxx
DB_USERNAME=xxxxxxxx
DB_PASSWORD=xxxxxxxx

MYSQL_ROOT_PASSWORD=xxxxxxxx
MYSQL_DATABASE=xxxxxxx

これで環境の下準備は終了です

Laravelを用意

次にLaravelプロジェクトを作成します
いくつかプロジェクトの作成方法はありますが、私はこれでやることが多いです。

プロジェクト作成コマンド
composer create-project --prefer-dist laravel/laravel プロジェクト名 "5.5.*"

しばらく待っているとプロジェクトが作成されます。(ほんと一瞬だからすごい)
Laravelフォルダーに移動して

env作成
cp .env.example .env

みたいな感じで.envファイルを作成しましょう。中身は適宜必要な形で書いてください。

composer install 

のコマンドを打つと必要なライブラリがインストールされます。ここまできたらプロジェクトフォルダに戻りdocker-compose upと打つとlaravelと書かれた。プロジェクトが立ち上がると思います。

以上!ほんと簡単!

おわりに

ご意見コメント等ございましたらぜひぜひご記載ください。
よろしければ ツイッターもやっているので
https://twitter.com/nobu_ne
をフォローお願いします。(技術的な話をつぶやくことは少ない笑)