LaradockでLaravel環境構築

Laravel を勉強するために Laradock を使用してみました。
いろんなサービスの Dockerfile が用意されていますが、まずは最低限の構成でチャレンジ。
Laradock 便利ー。

注意書き(※2021/02/24 追記) #

Laravel の Docker 環境を作成するにあたって、
現在の自分のスタンスとしては、Laradock よりもこちらの環境を使用するのをお勧めしています。
Laradock と比べて圧倒的に早く構築できます。

また、ご本人による解説記事もあり、非常に勉強になります。
特に Docker の知識に自信がない方はぜひ読んでみてください。

このスタンスのため、この記事は今後更新停止します。
ご了承ください。

前提 #

  • Docker 導入済み
  • docker-compose コマンドが使用できる

PHPフレームワーク「Laradock」で、手軽にLaravel+Dockerな開発環境を構築する
こちらの記事をベースに進めました。

Laradock #

導入 #

1.任意のプロジェクトフォルダを作成(ここが git の管理対象になるイメージ)

2.プロジェクトフォルダに移動して、Git の設定

$ git init

3.プロジェクトフォルダの中に Laravel プロジェクト用のフォルダを作成

4.プロジェクトフォルダの中で Laradock をサブモジュールとして登録

$ git submodule add https://github.com/Laradock/laradock.git (※Laradock 用のフォルダ名)

この時点のフォルダ構成

(git プロジェクトフォルダ)
 ├─ (Laravel プロジェクトフォルダ)
 ├─ (Laradock フォルダ)

env ファイル準備 #

チームメンバーと環境変数の共有のしやすさとして、シェルを作成します。
(※2019/8/14追記 環境変数ファイルを Git にあげることでもあるので、パブリックリポジトリではやらないほうがいいかもしれません)

シェル作成のあたりは、以下の記事を参考にしました。
LaravelとLaradockを使ったチームでの開発環境を用意する vol.1 Laradock設定編

1.シェル用のフォルダとファイルを作成(以下の.sh/

(git プロジェクトフォルダ)
 ├─ (Laravel プロジェクトフォルダ)
 ├─ (Laradock フォルダ)
 ├─ .sh/
    ├─ conf/
    ├─ setup.sh

2.conf/のなかに.laradock-envを作成(laradoc kの中のenv-exampleをコピー)
(以降、Laradock を更新した際はenv-exampleの内容が更新されている場合があるので、その際は再度合わせるようにしましょう)

3..laradock-envを編集

  • APP_CODE_PATH_HOST…Laradock の web サーバー上で同期するディレクトリパス。
  • DATA_PATH_HOST…docker のストレージなどを保存するローカルのディレクトリパス。
  • COMPOSE_PROJECT_NAME…コンテナの接頭辞(デフォルトの laradock だと、複数プロジェクトでLaradock を使用する際に名前が被って上書きになってしまうので変更しておく)。
例
APP_CODE_PATH_HOST=../(Laravel プロジェクトフォルダ)/
DATA_PATH_HOST=../.(Laradock フォルダ)/data

COMPOSE_PROJECT_NAME=laraveltutorial

4.setup.sh を編集

SCRIPT_DIR=$(cd $(dirname $0); pwd)

cd $SCRIPT_DIR

cp -f conf/.laradock-env ../(Laradockフォルダ)/.env

MySQL 8 対応 #

1..sh/conf以下にmysql.cnfを作成(Laradock の mysql/my.cnf をコピー)

2..sh/conf/mysql.cnfにmysql 8 の対応として以下を追記する

innodb_use_native_aio=0
default_authentication_plugin=mysql_native_password

DockerでPHP環境作成(+ MySQL + PHPMyAdmin)でも書いたとおり、MySQL は8から認証方式が変更になっているため、それを従来の認証方式に設定しなおすものです。
※追記 innodb_use_native_aio=0 については、他のバージョンでも必要かも

3..sh/setup.shに以下を追加

cp -f conf/mysql.cnf ../ (Laradockフォルダ)/mysql/my.cnf

4.setup.sh を実行して .env を作成 + mysql/my.cnf の更新
$ sh .sh/setup.sh

docker の起動 #

1.イメージの作成と起動( laradock フォルダに移動して)

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

※起動するコンテナは使用したいものに応じて変化。
初回は作成に少し時間がかかるので気長に待ちましょう。

2.起動イメージの確認

$ docker-compose ps

State がすべて Up になっていればOK。
(workspace と php-fpm も一緒に起動しているはず)

3.動作確認
http://localhostにアクセス。
※ DockerToolbox の場合は、http://(dockerのIP):80
この段階では、nginx の404画面になればOK。

Laravel プロジェクト #

作成 #

1.workspace コンテナに入る

$ docker-compose exec workspace bash

2.Laravel のインストール

$ composer create-project --prefer-dist laravel/laravel ./

3.動作確認
http://localhostにアクセス
※ DockerToolbox の場合は、http://(dockerのIP):80
以下の Laravel のトップページが表示されれば OK
Laravelトップ画面

MySQL の接続設定 #

1.Laravel プロジェクトの.envを修正
接頭辞が DB_ の部分を編集し、laradock フォルダ/.env に記述されている値に合わせる形になります。

例
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=default
DB_USERNAME=default
DB_PASSWORD=secret

2.マイグレーションを実行して接続テスト
workspace コンテナの中で以下コマンドを実行

$ php artisan migrate

デフォルトで存在するマイグレーションファイルが実行されます。ちゃんとテーブルが作成されていればOK。

Laravel の env ファイル準備 #

こちらもシェルで env ファイルの内容を共有できるようにしておきます。

1..sh/conf.laravel-envを作成
(Laravel プロジェクトの.envをコピー)

2.setup.sh に以下を追記する

cp -f conf/.**laravel**-env ../(Laravel プロジェクトフォルダ)/.env

他のメンバーが環境を作るときは #

1.プロジェクトをクローン

$ git clone (プロジェクトパス)

2.サブモジュールの内容をクローン

`$ git submodule update -i

※Laradock のディレクトリに移動し、$ git submoduleで状態が確認できる
-c7289f7db3b96be585a879ceaf0f208102f8233f ./ のように頭に-がついている場合は、まだ中身を持ってこれてない状態

3.シェル実行で env ファイル作成 + mysql 設定ファイルコピー

$ sh .sh/setup.sh

4.docker のイメージ作成と起動

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

※作成するコンテナは必要に応じて

5.起動イメージの確認

$ docker-compose ps

State がすべてUpになっていればOK。

6.workspace コンテナに入る(2019/12/7追記)

$ docker-compose exec workspace bash

7.パッケージのインストール(2019/12/7追記)

$ composer install

8.テーブルの作成(2019/12/7追記)

$ php artisan migrate

9.動作確認
http://localhostにアクセス
※ DockerToolbox の場合は、http://(dockerのIP):80
ちゃんとコードに応じた画面が表示されれば OK。


最初は MySQL 8対応で少し手間取りましたが、比較的楽に環境を作ることができました。
Laradock には豊富に Dockerfile が用意されているので、必要に応じてコンテナがすぐ作成できるのはいいですね。機会があれば他のコンテナも作成してみたいと思いますー。

参考リンクまとめ #