はじめに
Laradockという、Dockerコンテナ上でLaravelを動作させることができる素敵なプロジェクトがあるとのことで、早速試してみた。よくある事だが、ドキュメントでいかにも簡単そうに手順が書かれていても、実際はつまづきポイントが潜んでいて、今回も少し立ち止まったので、そこも含めた手順になります。
環境
- 2018/06/10 現在
- Docker for mac 18.03.1-ce
- Laravel v5.6.*
- Laradock v7.2.0
- nginx
公式ドキュメント
http://laradock.io/introduction/
まずはこのイントロダクションに沿って進めてみる。
手順
git clone
$ cd /YOUR/PROJECT/PATH
$ git clone https://github.com/Laradock/laradock.git
$ ls -lah
laradock
本記事と同じバージョンにする場合は -b v7.2.0
を指定してください。
未指定で最新。
.env
の作成
環境変数がまとめられているファイルをコピーして作成
cd /YOUR/PROJECT/PATH/laradock
cp env-example .env
あとでもう一度編集しますが取り急ぎポートを変えて置きます。
ドキュメントには載っていないですが、80だとmacのApacheが利用するポートと被りエラーになることがあるので8888に変えて置きます
$ vi .env
### NGINX #################################################
NGINX_HOST_HTTP_PORT=8888 // 80 → 8888(まぁ何でもいい)
コンテナ作成
起動したいサービスを指定してupします
(サービスというのは docker-compose.yml
の各項目の値)
$ cd /YOUR/PROJECT/PATH/laradock
$ docker-compose up -d nginx mysql phpmyadmin redis workspace
// ・・・しばしご歓談・・・
// コンテナの起動を確認
$ docker ps --format "table {{.ID}} {{.Names}}"
CONTAINER ID NAMES
27f1a9cbf5a2 laradock_nginx_1
dff26644e009 laradock_php-fpm_1
04100991a64a laradock_phpmyadmin_1
430d25cd8b16 laradock_workspace_1
d53e9263b730 laradock_mysql_1
311721d412de laradock_docker-in-docker_1
568796ee3551 laradock_redis_1
Laravel本体のダウンロード
本体はcomposerを利用して入手します。
composerや必要なライブラリがそろった workspace
コンテナにて行います。
$ docker exec -it laradock_workspace_1 bash
// コンテナにて
# cd /var/www
# composer create-project laravel/laravel my-cool-app "5.6.*"
# ls
laradock my-cool-app
docker-compose.yml
でvolumesが ../:/var/www
の状態でコンテナを生成したので
/YOUR/PROJECT/PATH/laradock/../
がコンテナの/var/www
にマウントされ、
ローカルからでも本体が確認出来ます。
// ローカルにて
$ cd /YOUR/PROJECT/PATH
$ ls
laradock my-cool-app
.env にLaravelのパスを設定
$ vi .env
APP_CODE_PATH_HOST=../
↓
APP_CODE_PATH_HOST=../my-cool-app/
// コンテナ更新
$ docker-compose up -d nginx mysql phpmyadmin redis workspace
// マウントされているパスが変わっているのが分かる
$ docker exec -it laradock_workspace_1 bash
# cd /var/www && ls
app composer.json database public routes tests
artisan composer.lock package.json readme.md server.php vendor
bootstrap config phpunit.xml resources storage webpack.mix.js
ブラウザで確認
http://localhost:8888/
ッターーーーン
localhost以外のドメインを設定してみる
先ほどでウェルカム画面は見れたのですが、試しにドメインを http://my-cool-app.test:8888
に変えてみます。
// ローカルにて
$ cd /YOUR/PROJECT/PATH/laradock/nginx/sites
$ cp default.conf my-cool-app.conf
vi my-cool-app.conf
server_name my-cool-app.test; //ここだけ変更
$ sudo vi /etc/hosts
// 追記する
127.0.0.1 my-cool-app.test
このときドメインは〇〇.devは避けたほうが良いです。
(Chromeで.dev
ドメインがHTTPSにリダイレクトされてしまう)
注意点
.envのportの変更
80でdocker-compose upするとnginxコンテナが起動せず以下のようなエラーが出ることがあります。
Starting laradock_nginx_1 ... error
ERROR: for laradock_nginx_1 Cannot start service nginx: driver failed programming external connectivity on endpoint laradock_nginx_1 (779ebdcb60c4eb4d4e2688df7076747a12b54e2770016a280723a506fb82f656): Error starting userland proxy: Bind for 0.0.0.0:80: unexpected error (Failure EADDRINUSE)
ERROR: for nginx Cannot start service nginx: driver failed programming external connectivity on endpoint laradock_nginx_1 (779ebdcb60c4eb4d4e2688df7076747a12b54e2770016a280723a506fb82f656): Error starting userland proxy: Bind for 0.0.0.0:80: unexpected error (Failure EADDRINUSE)
ERROR: Encountered errors while bringing up the project.
原因はmacのApacheやculpritというプロセスが80ポートを使ってたからでした。
(最初何も考えずに進めてエラーになった)
ERROR: for nginx Cannot start service nginx
というISSUEを見て解決しました。
〇〇.dev ドメインを使わない
理由はChromeだと.devが強制的にHTTPSになってしまうからで、代わりに
“.localhost”, “.invalid”, “.test”, or “.example”.
あたりを使うように言われていました。
変更が反映されない
もしup
したのに設定がコンテナに反映されてない疑惑があれば、以下の様にキャッシュなしで再ビルドを試してみると良いかもしれません。
$ docker-compose build --no-cache nginx