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
# 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
# 1行目
- FROM mysql:8.0
+ FROM mysql:5.5
apacheの設定
$ vim apache2/Dockerfile
# 1行目
- FROM webdevops/apache:ubuntu-16.04
+ FROM webdevops/apache:centos-7
docker-compose.ymlの設定
$ vim 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の設定の変更
- ${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
# DocumentRootを変更する(119行目)
- DocumentRoot "/var/www/html"
+ DocumentRoot "/var/www/public"
httpdサービスをリロードする
# service httpd restart
終わったら# exit
して構いません
http://localhost:8888
へアクセスしてみると…。
最後に
DocumentRootの設定をわざわざコンテナに入らずにやる方法もあります。
事前にhttpd.confを用意しておいて
DockerfileでCOPY文を書く事です。
その他Dockerfile等で済ませられる方法があれば
コメントよろしくお願いします。
またこちらに最小化したものを置いておきます
https://github.com/tunagohan/laradock