Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away