Dockerを使ったLaravelの開発環境の構築

Dockerを使ったLaravelの開発環境の構築

AWS・Vue・Laravelを諸々勉強するために、アプリケーションを作ろうと思って、Laravelの開発環境を構築しました。

開発環境の構築に今回はDockerを利用したので、その際にやったことをこの記事ではご紹介していきます!

必要なもの

Dockerを使ったLaravelのインストールには以下のものが必要です。

・Dockerのクライアントツール(Docker for Mac または Docker for Windows)https://hub.docker.com/

・git

・エディタ(VSCodeなど)

この記事では、DockerのクライアントツールにはDocker for Macを、エディタはVSCodeを利用していきます

Laradockのダウンロード

まずはプロジェクトのディレクトリを作成し、laradocをGitHubからcloneします。

コンソールを開き以下のコマンドを実行します。

// projectという名前のディレクトリを作成
$ mkdir project

// projectのディレクトリに移動
$ cd project 

// laradocをcloneする
$ git clone https://github.com/laradock/laradock.git

環境変数の修正

laradocをGitHubからcloneしたら、環境変数を修正していきます。

laradocディレクトリ内の「env-example」ファイルをコピーして、「.env」という名前に変更しましょう。

コピーして名前を変更したら「.env」の方をエディタで開きます。

PHPのバージョン

laradocディレクトリ内の「.env」ファイルを修正していきます。

まずはPHPのバージョンです。

41行目にあるPHPのバージョンを「7.3」に変更します。

MySQLのバージョンとポート

続いてMySQLのバージョンを変更していきます。

デフォルトではMySQLのバージョンは「8.0」がインストールされるようになっています。

しかし、2019年7月時点で、MySQL8.0でlaravelのマイグレーションを行うとエラーが発生します。

これは8.0からのMySQL認証方式にPHPが対応してないためです。

MySQL8.0.4以降 のログイン認証方式は caching_sha2_password がデフォルト
・PHPのMySQL接続ライブラリが caching_sha2_password に未対応のため接続不可
・解決策としては認証方式を mysql_native_password に戻す

MySQL8.0 認証方式を変更する(Laravel5)

そのため、後からMySQLの認証方式を変更する手間が発生します。

特に8.0を使いたい理由がなければ「5.7」でも問題ないので、ここでは「5.7」を入れていきます。

また、brew等でローカルにMySQLを入れている人は、ポート番号が被って正常に接続できなくなるため、合わせて変更しておきます。

ここではポート番号を「4306」にしています。

コンテナをビルドする

環境変数の修正が終わったら、コンテナのビルドをしていきます。

ターミナルを開き、laradoc内で以下のコマンドを実行します。

$ docker-compose up -d nginx mysql

上記のコマンドを実行すると、nginx/mysql/php-fpmのコンテナイメージのダウンロードとビルドを行ってくれます。

このように指定することで、必要なもののみをセットアップしてくれます。

指定しない場合は「.env」内に定義されている全てのイメージ(REDISやAPACHEなど)を持ってくるので時間がかかります。

ここでは最低限必要なもののみをインストールしています。

少し時間がかかりますが、その間に以下の便利ツールをインストールしておくと良いでしょう。

・VSCodeでコンテナの起動などができるプラグイン「Docker」

・MySQLのGUIツール「Sequel Pro

セットアップが完了したら、以下のコマンドを実行するとそれぞれのコンテナが起動しているのがわかります。

$ docker ps -a

またVSCodeであれば先ほど紹介したプラグインで、以下のように動作を確認できます。

Laravelのセットアップ

インストール

Dockerの準備ができたところで、Laravelをインストールしていきます。

まずはnginxのセットアップで作られたLinuxコンテナ(workspace)にログインします。

以下のコマンドをlaradocディレクトリ内で実行してworkspaceにログインします。

$ docker-compose exec --user=laradock workspace bash

workspaceにログイン後、以下のコマンドでLaravelをインストールします。

「first_app」の所は、お好きな名前で大丈夫です。

$ composer create-project laravel/laravel first_app

インストールが完了したら「ls」コマンドでプロジェクトが確認できます。

$ ls 
laradock first_app

動作確認

Nginxの設定

laravelプロジェクトのインストールが終わったら、初期ページを表示してみましょう。

まずは以下のコマンドを実行して、workspaceのコンテナから抜けましょう。

$ exit

続いて「laradoc」内にある「nginx」ディレクトリを見てみましょう。

「nginx」ディレクトリ内の「sites」にある「laravel.conf.example」をコピーして「laravel.conf」に変更して保存します。

「default.conf」は必要ないので削除します。

続いて「laravel.conf」をエディタで開きます。

13行目のコードをlaravelプロジェクトの名前に変更します。

root /var/www/laravel/public;
↓
root /var/www/first_app/public;

変更を保存したら、nginxのコンテナ(laradock_nginx)を再起動します。

$ docker-compose restart

コンテナを再起動したら「http://localhost/」にアクセスし、以下のようにページが表示されれば成功です。

マイグレーションの実行

まずはlaradoc内のディレクトリで以下のコマンドを実行し、MySQLのコンテナに入りましょう。

$ docker-compose exec mysql bash

コンテナに入ったらMySQLにログインします。

デフォルトではユーザー名・パスワードともに「root」でログインできます。

$ mysql -u root -p
Enter password: 

ログインしたら以下のSQLを実行してデーターベースを作成します。

「first_db」の所はデーターベース名ですので、お好きな名前にしてください。

CREATE DATABASE IF NOT EXISTS first_db COLLATE utf8_general_ci;

実行したら以下のクエリを実行して、作成したデータベースがあるか確認できます。

show databases;

データベースを作成したら「exit」コマンドを利用して、コンテナから抜けましょう。

続いてLaravelプロジェクト内(ここではfirst_app)の「.env」を変更します。

エディタで「.env」を開き、データベース周りの環境を以下のように修正します。

DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=4306
DB_DATABASE=first_db
DB_USERNAME=root
DB_PASSWORD=root

変更を反映させるためにDockerを再起動しましょう。

$ docker-compose restart

それではターミナルでlaradoc内に移動して「workspace」コンテナにログインしましょう。

$ docker-compose exec --user=laradock workspace bash

ログインしたらLaravelプロジェクト(first_app)内に移動します。

移動後以下のコマンドを実行して、マイグレーションを実行します。

php artisan migrate

以下のように表示されれば、マイグレーション成功です。

Sequel ProでMySQLのコンテナに接続

最後にマイグレーションで作成したテーブルをMySQLクライアントツールの「Sequel Pro」で確認してみます。

「Sequel Pro」を開き、以下のように入力すればMySQLのコンテナに接続することができます。

ユーザー名・パスワードは「root」でログインできます。

接続すると以下のようにテーブルが作成されているのが確認できます。

おわりに

以上でDockerを利用したLaravelの開発環境の構築の完了です。

開発環境の構築方法は色々ありますが、Dockerを利用した構築が一番簡単だったと個人的には思います。

ただいくつか使いづらい点もあるので、色々カスタマイズしていきたいですね。

その際はぜひLaradocの公式ドキュメントも確認してみることをオススメします!

Laradock

Laravelカテゴリの最新記事