Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
20
Help us understand the problem. What is going on with this article?
@k-waragai

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

More than 3 years have 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

20
Help us understand the problem. What is going on with this article?
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
k-waragai
欲しい物は自ら作り、不便なら自ら改善せよ

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
20
Help us understand the problem. What is going on with this article?