Laradockを使ってLaravelの開発環境構築手順をまとめました。

Laradockとは?

https://laradock.io/ 一言で言うと、「Laravelをdocker上で動かすぜ!」というものです。 これを使うことで、開発環境構築が非常にスムーズに構築できます。

他にもVagrantやHomesteadを使用した開発環境構築があります。 Homesteadを使った開発環境構築手順は過去に記事にしていますので、こちらを参照ください。 laravel + homestead + xdebugの開発環境構築手順

事前準備

Laradockを使うにあたり、以下の二つのツールが必要になります。 インストールをお願いします。

docker

Install Docker for Mac

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の${DATAPATHHOST}の部分をコメントアウトするなり、$DATAPATHHOSTの値を変えるなりすれば解決するみたい。 Laradock mysql exited with code 2

参考にしたサイトや書籍