LaradockでLaravel環境構築

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

前提 #

  • 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を作成(laradockの中の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が用意されているので、必要に応じてコンテナがすぐ作成できるのはいいですね。機会があれば他のコンテナも作成してみたいと思いますー。

参考リンクまとめ #