【Laravel】laradockを使ってLaravelの開発環境を構築してみよう!

Laravelの開発環境をDockerを使って準備してみましょう。

これは2019/8/12現在における備忘録です。

まずDockerをインストールしておきます。

Mac版はこちら

Docker Desktop for Mac

インストールしたらターミナルからインストールがされているかどうか確認しましょう。

$ docker version
Client: Docker Engine - Community
 Version:           19.03.1
(省略)

$ docker-compose -v
docker-compose version 1.24.1, build 4667896b

ここから先はプロジェクトを作る毎に行う作業です。
任意の位置にLaravelProjectディレクトリ及び配下にsrcディレクトリを作成します。
LaravelProjectは好きな名前で結構です。

またgitでのバージョン管理を行うため、gitの初期化コマンドも合わせて実行しておきます。

$ mkdir LaravelProject && cd LaravelProject  (作業場所を作成したプロジェクトディレクトリに変更します)
$ mkdir src (srcディレクトリが作成されます。)

$ git init  (.gitディレクトリが作成されます。)  

次に肝心のLaradock本体を、gitのsubmoduleとして追加します。

$ git submodule add https://github.com/Laradock/laradock.git (laradockディレクトリが作成されます。)

以上で

LaravelProject
├── laradock
├── src
├── .git
└── .gitmodules

このようなディレクトリ構成になるかと思います。

まず、Laradockの設定ファイル『.env』をサンプルファイルを元に作成します。

$ cd laradock  (作業場所をlaradockディレクトリに変更します。)
$ cp env-example .env  (exv-exampleファイルを.envという名前でコピーします。)

今回はLaravelのインストール先をsrcディレクトリ配下にするため、
上記コピーした.envファイルを下記のように書き換えます。

APP_CODE_PATH_HOST=../  を
APP_CODE_PATH_HOST=../src/  に書き換えます。

また、MySQLのデータベースファイルの保存場所をsrcディレクトリと同じ場所に変更します。

そのため上記と同様に.envファイルを書き換えます。

DATA_PATH_HOST=~/.laradock/data を
DATA_PATH_HOST=../.laradock/data に書き換えます。

データベースはコンテナを破棄しても削除されず、また、保存場所が初期状態では別コンテナからも同じデータベースを参照してしまいます。
それを避けるため、プロジェクトごとにデータベースファイルが作成されるように、プロジェクトディレクトリの中に保存場所を変更しました。

laradock/mysqlの中のmy.cnfを編集します。

[mysqld]配下に

default_authentication_plugin=mysql_native_password

を追記しておきます。

これは、Laradockが最新のMySQLイメージをダウンロードしてきてしまうからです。
MySQL8.0からセキュリティが強化されており、ユーザー認証方式が従来の『mysql_native_password』方式から
ハッシュ化をする『caching_sha2_password』方式へと変更されています。
ただ、PHPの接続ライブラリが『caching_sha2_password』に対応していないため、
この『my.cnf』内で従来どおりの『mysql_native_password』を利用するよう指定する必要があるのです。

docker-compose.ymlのある場所で作業します。
まずはnginxを立ち上げてみましょう。

$ pwd
/LaravelProject/laradock

$ ls -la | grep docker-compose.yml
-rw-r--r--   1 user  staff  53394  8 12 11:51 docker-compose.yml

$ docker-compose up -d nginx (このコマンドで起動します。)

先程起動したnginxに依存しているworkspaceも起動しているか確認します。

$docker ps
CONTAINER ID        IMAGE                COMMAND                  CREATED             STATUS              PORTS                                      NAMES
d73f7997843c        laradock_nginx       "/bin/bash /opt/star…"   5 seconds ago       Up 3 seconds        0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp   laradock_nginx_1
05307c072d63        laradock_php-fpm     "docker-php-entrypoi…"   6 seconds ago       Up 4 seconds        9000/tcp                                   laradock_php-fpm_1
564460a61a92        laradock_workspace   "/sbin/my_init"          7 seconds ago       Up 5 seconds        0.0.0.0:2222->22/tcp                       laradock_workspace_1
19c91a2a3e84        docker:dind          "dockerd-entrypoint.…"   8 seconds ago       Up 6 seconds        2375-2376/tcp                              laradock_docker-in-docker_1

laradock_workspaceが起動していることが確認できるかと思います。
もしworkspaceが起動してなければ次のコマンドで起動させます。

$docker-compose up -d workspace  

次にworkspaceコンテナへ接続します。

$docker-compose exec workspace bash

では、workspaceコンテナ内で作業していきます。
『/var/www』配下にcomposerを使ってLaravelをインストールしましょう。

# pwd
/var/www
# composer create-project --prefer-dist laravel/laravel ./

あとは、『http://localhost』を開いてみて、Laravelのページが表示されればOKです。

また、workspaceコンテナからexitコマンドで抜けて、
ローカル上のsrcディレクトリにLaravel関連のファイルが作成されていることを確認しておきましょう。

いよいよLaravel本体のDB接続設定をしていきます。
srcディレクトリ配下の.envを開いて下記のとおり変更しましょう。

$ cd ../src
DB_CONNECTION=mysql
DB_HOST=mysql       # 127.0.0.1をmysqlに変更
DB_PORT=3306
DB_DATABASE=default # homesteadをdefaultに変更
DB_USERNAME=default # homesteadをdefaultに変更
DB_PASSWORD=secret

実際にデータベースと、接続確認用のphpMyAdminを起動していきます。
docker-compose.ymlのある場所で作業するため、laradockディレクトリに移動します。
mysqlコンテナと、phpmyadminコンテナを起動しましょう。

$ cd ../laradock

$ docker-compose up -d --build mysql
$ docker-compose up -d phpmyadmin

mysqlについてはbuildオプションをつけて起動します。
これは、docker-compose upで起動する際キャッシュが利用され、my.cnfで書き換えた設定が反映されないことがあるためです。

このオプションをつけるとキャッシュを利用しないよう指定できます。

http://localhost:8080をブラウザで開いてphpMyAdminに接続します。

先程src/.envファイルで設定したとおり

ホスト mysql
ユーザーID default
pass secret

でログイン出来ることを確認します。

最後にworkspaceコンテナに再度入り、下記コマンドでエラーがでないことを確認します。

$ docker-compose exec workspace bash
$ php artisan migrate

ここでエラーがなければOKです。

srcディレクトリにてnpmでnode_modulesをインストールしておきます。

$ cd src
$ npm install
$ npm run watch

ファイルの更新を監視し、更新されたら自動ビルドしてくれるコマンドです。

これにて環境設定は完了です。
以下は環境を再構築する際のコンテナの削除方法です。

docker-compose.ymlのある場所で

docker-compose down

.laradock/もデータベースを永続化するためのディレクトリなので削除しておきます。
プロジェクトごと削除したほうが早いです。

rm -rf LaravelProject
docker ps 動いているコンテナの確認
docker ps -a 停止のものも確認できる
docker images imageファイルの一覧を表示

以上、Laravelの開発環境作成でした。

コメントを残す

名前、メールアドレスは任意です。メールアドレスが公開されることはありません。

内容をご確認の上、送信してください。