MySQL
Apache
laravel
php-fpm
docker-compose

DockerでLaravel(Apache+php-fpm+mysql)を構築する手順書

mac + DockerでLaravel環境を作る為の手順書です

以下の環境を作成致します

  • CentOS 7
  • Apache 2.4
  • php 5.6
  • MySQL 5.5
  • Laravel

またDockerなどはインストールされているものとします

最終的なディレクトリ

project_name
  ├── laradock
  │     ├─ apahce2
  │     │    └─ Dockerfileなど
  │     ├─ mysql
  │     │    └─ Dockerfileなど
  │     ├─ php-fpm
  │     │    └─ Dockerfileなど
  │     ├─ workspace
  │     │    └─ Dockerfileなど
  │     ├─ .laradock
  │     │    └─ data
  │     │
  │     ├── docker-compose.yml
  │     └── .env
  │
  └── laravel-app
       └── laravelのアプリを配置

Dockerの必要な設定をする

laradockをクローンをし.envを作成する

ついでにのちに必要になる.laradock/dataも作成しておく

$ git clone https://github.com/laradock/laradock.git
$ cd laradock
$ cp env-example .env
$ mkdir -p .laradock/data

envファイルをいじる

$ vim .env

.env
# laradock内に作りたい為(13行目)
- DATA_SAVE_PATH=~/.laradock/data
+ DATA_SAVE_PATH=.laradock/data

# workspaceとはバージョンを別にしたい為(20行目)
+ PHP_FPM_VERSION=56

# ポートの重複を避ける為(84,85行目)
- APACHE_HOST_HTTP_PORT=80
- APACHE_HOST_HTTPS_PORT=443
+ APACHE_HOST_HTTP_PORT=8888
+ APACHE_HOST_HTTPS_PORT=8443

mysqlの設定

$ vim mysql/Dockerfile

Dockerfile
# 1行目
- FROM mysql:8.0
+ FROM mysql:5.5

apacheの設定

$ vim apache2/Dockerfile

Dockerfile
# 1行目
- FROM webdevops/apache:ubuntu-16.04
+ FROM webdevops/apache:centos-7

docker-compose.ymlの設定

$ vim docker-compose.yml

docker-compose.yml
# php-fpmの設定(78,82行目)
- dockerfile: "Dockerfile-${PHP_VERSION}"
+ dockerfile: "Dockerfile-${PHP_FPM_VERSION}"

- ./php-fpm/php${PHP_VERSION}.ini:/usr/local/etc/php/php.ini
+ ./php-fpm/php${PHP_FPM_VERSION}.ini:/usr/local/etc/php/php.ini

composeする

  • workspace
  • php-fpm
  • apache
  • mysql

の4つを立ち上げます

$ docker-compose up -d workspace mysql php-fpm apache2

結構時間がかかるのでコーヒーを飲んで待ちましょう。

laravelアプリの作成と設定の変更

workpsaceのコンテナ内へ入る

$ docker-compose ps "workspace"
          Name                Command      State          Ports
-----------------------------------------------------------------------
laradock_workspace_1   /sbin/my_init   Up      0.0.0.0:2222->22/tcp

$ docker exec -it laradock_workspace_1 bash

コンテナ内でlaravel-appを作成する

root@{コンテナID}:/var/www# 
長いので省略
# composer create-project --prefer-dist laravel/laravel project_name

ここでも時間がかかるので待ちましょう
終わったら# exitしてコンテナから出ましょう

docker-compose.ymlの設定の変更

docker-compose.yml
- ${APPLICATION}:/var/www
+ ${APPLICATION}project_name:/var/www

この状態で
http://localhost:8888
へアクセスしても繋がりません。

なぜ繋がらないのかログを見ましょう

$ docker logs -f laradocktuna_apache2_1

-> Executing /opt/docker/bin/service.d/httpd.d//10-init.sh
2017-07-09 06:43:10,580 INFO success: apached entered RUNNING state, process has stayed up for > than 0 seconds (startsecs)
AH00526: Syntax error on line 119 of /etc/httpd/conf/httpd.conf:
DocumentRoot '/var/www/html' is not a directory, or is not readable
2017-07-09 06:43:10,629 INFO exited: apached (exit status 1; not expected)

永遠にログが出続けていますね…。✌︎('ω'✌︎ )

注目すべきは

DocumentRoot
'/var/www/html' is not a directory

(/var/www/htmlのディレクトリが見つからないよ!)

なので

apacheコンテナに入ってDocumentRootを設定してあげましょう

apacheコンテナに入る

$ docker-compose ps "apache2"
         Name                       Command               State                      Ports
-------------------------------------------------------------------------------------------------------------
laradocktuna_apache2_1   /opt/docker/bin/entrypoint ...   Up      0.0.0.0:8443->443/tcp, 0.0.0.0:8888->80/tcp

$ docker exec -it laradock_apache2_1 bash

httpd.confの設定を変更する

[root@{コンテナID} public]#
長いので省略
# vi /etc/httpd/conf/httpd.conf
httpd.conf
# DocumentRootを変更する(119行目)
- DocumentRoot "/var/www/html"
+ DocumentRoot "/var/www/public"

httpdサービスをリロードする
# service httpd restart
終わったら# exitして構いません

http://localhost:8888
へアクセスしてみると…。

スクリーンショット 2017-07-09 15.52.17.png

最後に

DocumentRootの設定をわざわざコンテナに入らずにやる方法もあります。

事前にhttpd.confを用意しておいて
DockerfileでCOPY文を書く事です。

その他Dockerfile等で済ませられる方法があれば
コメントよろしくお願いします。

またこちらに最小化したものを置いておきます
https://github.com/tunagohan/laradock