Laradockを使ってLaravelの開発環境構築手順をまとめました。
Laradockとは?
https://laradock.io/ 一言で言うと、「Laravelをdocker上で動かすぜ!」というものです。 これを使うことで、開発環境構築が非常にスムーズに構築できます。
他にもVagrantやHomesteadを使用した開発環境構築があります。 Homesteadを使った開発環境構築手順は過去に記事にしていますので、こちらを参照ください。 laravel + homestead + xdebugの開発環境構築手順
事前準備
Laradockを使うにあたり、以下の二つのツールが必要になります。 インストールをお願いします。
docker
gitコマンド
今回はHomebrewでインストールしました。 Homebrew
$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
$ brew install git
ディレクトリ構成
今回のディレクトリ構成です、laradockはLaradock本体を格納したディレクトリ、laravel_templateは開発対象のLaravelプロジェクトです。
.
├── laradock
└── laravel_template
Laradockのダウンロード
$ git clone https://github.com/Laradock/laradock.git
$ cd laradock
.envファイルの作成
env-example.envというファイルが用意されているので、それをコピーして使います。
$ cp env-example .env
コンテナの初期化
ひとまず起動。
$ docker-compose up -d nginx mysql workspace phpmyadmin
コンテナの確認
dockerコマンドでコンテナの確認を行います。NAMESにlaradock_~~というのがあり、STATUSがExitedとかになっていなければOKかと思います。
$ docker ps -a
この時点でlocalhostにアクセスしても、Laravel本体がダウンロードされていないので「404 Not Found」になります。 localhost
Laravelのダウンロード
というわけで、次はLaravelをダウンロードして動かせるようにします。 dockerコンテナ内に入って、composerを使ってLaraveをダウンロードします。
$ docker-compose exec --user=laradock workspace bash
laradock:/var/www$ composer create-project laravel/laravel sampleapp --prefer-dist "5.5.*"
laradock:/var/www$ exit
.envの編集
環境に合わせて先ほどコピーした.envの編集を行います。 私の場合は使うポート番号やデータベース名を変えたかったので、以下のように変更しました。
$ vi .env
# ディレクトリ構成で紹介した、プロジェクト名を指定します。
# APP_CODE_PATH_HOST=../
APP_CODE_PATH_HOST=../laravel_template
# ブラウザでアクセスする際のポート番号を指定します。
# NGINX_HOST_HTTP_PORT=80
NGINX_HOST_HTTP_PORT=8880
# mysqlのデータベース名やユーザ名の変更
# MYSQL_VERSION=latest
# MYSQL_DATABASE=default
# MYSQL_USER=default
MYSQL_VERSION=5.7
MYSQL_DATABASE=laravel_template
MYSQL_USER=laravel_template
dockerコンテナの再起動
$ docker-compose stop
$ docker-compose up -d nginx mysql workspace phpmyadmin
ブラウザからアクセス
localhost:8880 アクセスできましたでしょうか。
mysqlへ接続
続いて、mysqlへアクセスする方法です。
mysql workbenchで接続
項目名 | 設定値 |
---|---|
Connection Name | 任意の名前 |
Connection Method | そのまま (Standard TCP/IP) |
Hostname | そのまま(127.0.0.1) |
Port | そのまま(3306) |
Username | default(.envで変更した場合はそのユーザ名) |
Default Schema | default(.envで変更した場合はそのスキーマ名) |
パスワードは「secret」です。(こちらも.envで設定している値になります。)
ブラウザから接続
phpmyadminを起動します。
$ docker-compose start phpmyadmin
以下のURLにアクセスし、 http://localhost:8080/
サーバ名: mysql
ユーザ名: root
パスワード: root
と入力すればログインできるはず。
エラー対応
色々いじってたらエラーがでたので、その時対応した内容をまとめました。
.envの設定値が反映されない場合
ここらへんのコマンドを使って
## コンテナ削除
$ docker-compose stop
$ docker-compose rm -f
## ボリュームコンテナの全削除
$ docker volume rm $(docker volume ls -qf dangling=true)
## キャッシュを使用しないでビルド
$ docker-compose build --no-cache && docker-compose up -d
私の場合.envを反映させようとしてコンテナの再構築を行なったら以下のようなエラーがでたので、
ERROR: Service 'aws' failed to build: COPY failed: stat /var/lib/docker/tmp/docker-builder171751154/ssh_keys: no such file or directory
ここ見てこのコマンド打って解決しました。 Service 'aws' failed to build
$ mkdir aws/ssh_keys/
$ touch aws/ssh_keys/id_rsa.pub
$ docker-compose build --no-cache nginx mysql workspace phpmyadmin
$ docker-compose up -d nginx mysql workspace phpmyadmin
mysqlが起動しない場合
docker ps -aでコマンドを打つと、
89f938d3c236 laradock_mysql "docker-entrypoint.s…" 59 seconds ago Exited (2) 55 seconds ago laradock_mysql_1
と表示され、mysqlのコンテナが起動しない。
その場合は、docker-compose.ymlファイルの
### MySQL ################################################
mysql:
build:
context: ./mysql
args:
- MYSQL_VERSION=${MYSQL_VERSION}
environment:
- MYSQL_DATABASE=${MYSQL_DATABASE}
- MYSQL_USER=${MYSQL_USER}
- MYSQL_PASSWORD=${MYSQL_PASSWORD}
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
- TZ=${WORKSPACE_TIMEZONE}
volumes:
# - ${DATA_PATH_HOST}/mysql:/var/lib/mysql
- ${MYSQL_ENTRYPOINT_INITDB}:/docker-entrypoint-initdb.d
ports:
- "${MYSQL_PORT}:3306"
networks:
- backend
volumesの${DATA_PATH_HOST}の部分をコメントアウトするなり、$DATA_PATH_HOSTの値を変えるなりすれば解決するみたい。 Laradock mysql exited with code 2