【Laravel】Docker for WindowsでLaradock(+MySQL)の環境構築

<h2>はじめに</h2>

Docker for WindowsでLaradockの環境構築をして、Webアプリが作れるところまで記載しております。

DBに関してはMySQLでphpmyadminも利用できるようにしています。

※なおDockerのインストールに関しては割愛させていただいております。
<h2>環境構築</h2>
最初に大まかなアプリ制作までの流れをまとめておきます。
<h3>Laradockの起動</h3>
※Dockerのインストール後です

フォルダ作成。
<pre>$ mkdir laravel_app 
$ cd laravel_app</pre>
git cloneコマンドでLaradockのダウンロード後し.envファイルを作成
<pre>$ git clone https://github.com/laradock/laradock.git
$ cd laradock
$ cp env-example .env
</pre>
.envファイルを編集(※MySQLのバージョンは8.0以上になっているとセキュリティの関係でDockerがうまく動作しないらしい)
<pre>APP_CODE_PATH_HOST=../laravel #laravelのプロジェクトファイル名に書き換え
DATA_PATH_HOST=../data　#複数データを参照してしまう可能性があるため
COMPOSE_PROJECT_NAME=docker_mysql #dockerのコンテナ名を変更
MYSQL_VERSION=5.7 #latestから変更
DB_HOST=mysql #追記</pre>
(僕の場合は更にdocker-compose.ymlのphpmyadminのポート番号を8081に変更。※原因不明&amp;後述※)
(MySQL Notifierインストールされてる方はこちらも毎回起動するので停止させておく。)

<span style="color: #ff0000;"><strong>コンテナの初期化(実行コマンド※Dockerアプリは起動した状態※)</strong></span>
<pre>$ docker-compose up <span class="nt">-d</span> nginx mysql workspace phpmyadmin</pre>
<h3>プロジェクトの作成</h3>
プロジェクト作成
<pre class="ql-syntax" spellcheck="false">$ docker-compose exec workspace composer create-project --prefer-dist laravel/laravel . "6.8.*"
Application key set successfully.</pre>
以下で既にアクセスできるはずです。(Dockerの場合はphp artisan serveが不要。)

Laravelアプリ トップ画面 <a href="http://localhost/">http://localhost/</a>
phpmyadmin トップ画面 <a href="http://localhost:8081/">http://localhost:8081/</a>

DB作成は以下でphpmyadminにログインして作成します。(もしくはコマンドで)

<code>サーバ名：mysql</code>
<code>ユーザー名：root</code>
<code>パスワード：root</code>

Laravelプロジェクト下の.envファイルを編集。
<pre>DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=docker_mysql // phpMyAdminで作ったDB名に合わせる。
DB_USERNAME=root
DB_PASSWORD=root</pre>
<h4>コントローラー作成</h4>
<pre>$ docker-compose exec workspace php artisan make:controller ArticleController
Controller created successfully.</pre>
<h4>マイグレーションファイル作成</h4>
<pre>$ docker-compose exec workspace php artisan make:migration create_articles_table --create=articles
Created Migration: 2020_03_24_092458_create_articles_table</pre>
<h4>マイグレート</h4>
<pre>$ docker-compose exec workspace php artisan migrate
Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated: 2014_10_12_000000_create_users_table (0.13 seconds)
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated: 2014_10_12_100000_create_password_resets_table (0.13 seconds)
Migrating: 2019_08_19_000000_create_failed_jobs_table
Migrated: 2019_08_19_000000_create_failed_jobs_table (0.07 seconds)
Migrating: 2020_03_24_092458_create_articles_table
Migrated: 2020_03_24_092458_create_articles_table (0.05 seconds)</pre>
※phpMyAdminでDBを作成しておかないとマイグレートできないので注意してください！！
<h3>その他の主要コマンド</h3>
<h4>起動の確認</h4>
statusがupになっていれば起動中です。
<pre>$ docker ps</pre>
<img class="alignnone size-full wp-image-530" src="https://chobimusic.com/wp-content/uploads/2020/03/aa-2.jpg" alt="" width="1013" height="269" />
<h4>サービスの終了</h4>
<pre>docker-compose stop</pre>
<h4>再起動</h4>
<pre>docker-compose up <span class="nt">-d</span> nginx mysql workspace phpmyadmin</pre>
<h2>躓きポイント</h2>
ここからが僕がDockerでの環境構築で躓いた部分です。
<h3>docker-compose upでMySQLが起動しない問題</h3>
原因のほとんどはポート被りです。

<strong>対処法：①ローカルに落としているMySQLをオフにする②XAMPPのMySQLをオフにする</strong>

以下、エラー発生時の例。3306ポートが使えないの図。

<img class="alignnone wp-image-528" src="https://chobimusic.com/wp-content/uploads/2020/03/docker-error-1024x543.jpg" alt="" width="820" height="435" />
<h4>対処法<strong>①ローカルに落としているMySQLをオフにする</strong></h4>
Windowsでしたら以下のようにタスクバーを確認してください。

MySQLがいたらそいつが原因の可能性が高いです。

<img class="alignnone size-full wp-image-535" src="https://chobimusic.com/wp-content/uploads/2020/03/mysql.jpg" alt="" width="387" height="208" />

こいつを停止しましょう。

その後、コマンドを実行すると3306でも起動するようになります。

<img class="alignnone size-full wp-image-550" src="https://chobimusic.com/wp-content/uploads/2020/03/cac.jpg" alt="" width="793" height="305" />
<h4>対処法<strong>②XAMPPのMySQLをオフにする</strong></h4>
上記と同じように、もしXAMPPでMySQLを起動していたとしたらエラーの原因になります。

こちらもStopしてから再起動すれば起動します。

ちなみに両方共存させたくてポート番号を変更したい場合は以下です。

.envファイル上で3306と記載の部分を3307に変更して再度compose upすると3307で起動します。

<img class="alignnone size-full wp-image-529" src="https://chobimusic.com/wp-content/uploads/2020/03/docker-errorecv.jpg" alt="" width="327" height="91" />

&nbsp;
<h3>phpMyAdminが起動しない問題</h3>
<h4><strong>対処法：ポート番号を変更する。</strong></h4>
docker-compose.ymlのphpmyadminのポート番号を8081に変更。
<pre>//ポートのみ変更した場合
phpmyadmin:
      build: ./phpmyadmin
      environment:
        - PMA_ARBITRARY=1
        - MYSQL_USER=root
        - MYSQL_PASSWORD=password
        - MYSQL_ROOT_PASSWORD=password
　　　　ports:
　　　　- <strong>8081:80</strong>

//サーバ名を調べるのに試行錯誤したパターン。※ログインエラー。
mysql:
      build:
        context: ./mysql
        args:
          - MYSQL_VERSION=${MYSQL_VERSION}
      environment:
        - MYSQL_DATABASE=DB
        - MYSQL_HOST=DB
        - MYSQL_USER=root
        - MYSQL_PASSWORD=password
        - MYSQL_ROOT_PASSWORD=password
        - TZ=${WORKSPACE_TIMEZONE}

phpmyadmin:
      build: ./phpmyadmin
      environment:
        - PMA_ARBITRARY=1
        - PMA_HOST=mysql
        - PMA_USER=root
        - PMA_PASSWORD=password
      ports:
        - 8081:80</pre>
その後コマンドを実行すると起動します。

<img class="alignnone size-full wp-image-556" src="https://chobimusic.com/wp-content/uploads/2020/03/aaaaaaa.jpg" alt="" width="511" height="197" />

※8080ポートが何に使用されているのか原因は掴めませんでした。。。わかり次第追記します。
<h3>phpMyAdminログインできない問題</h3>
正直、これは既に上述の内容ができていればわかることなのですが。。。

そこに至るまでに個人的に躓いたことだったので一応記載しておきます。

<strong>対処法：①.envファイルに従う</strong><strong>②rootユーザーでログインする。</strong>

http://localhost:8081でphpmyadminへアクセス。

以下の画面になります。

<img class="alignnone size-full wp-image-561" src="https://chobimusic.com/wp-content/uploads/2020/03/phpmy.jpg" alt="" width="443" height="606" />

XAMPPではこのような画面は出ないので困惑する人も多いはず。。。
<h4><strong>対処法：①.envファイルに従う</strong></h4>
laravel-practiceの.envに従い入力したところログインに成功。
サーバ：mysql
ユーザー：default
パスワード：secret

以下参照
<pre>DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3307
DB_DATABASE=default
DB_USERNAME=default
DB_PASSWORD=secret</pre>
<span style="color: #ff0000;">※ただしこちらは編集権限がありません。(意味ない。。。)</span>

<img class="alignnone size-full wp-image-563" src="https://chobimusic.com/wp-content/uploads/2020/03/kengen.jpg" alt="" width="417" height="210" />
<h4><strong>対処法：②rootユーザーでログインする。</strong></h4>
実は.envファイルに以下のような記載があります。
<pre>MYSQL_ROOT_PASSWORD=root</pre>
ユーザー：root
パスワード：root

以上で、ログインすると編集できます◎

また、コマンドラインでも以下のように実行可能です。
<pre><span class="n">mysql</span> <span class="o">-</span><span class="n">u root </span><span class="o">-</span><span class="n">p root //こちらからもアクセス可能
</span></pre>
<pre><span class="vg">create</span> <span class="n">database</span> default<span class="p">; //DB作成</span></pre>

<h2>おわりに</h2>
あまりにもわかりにくい記事だったため大幅に内容を修正しました。

以前の格闘感丸出しの記事は一応こちらにございます。

https://chobimusic.com/laradock_mysql_memo/

<h3>参考記事</h3>
<p class="it-Header_title">Windows10でLaradockを使ってLaravel 5.5環境を作る
<a href="https://qiita.com/sket88/items/4de708ce394179c61d8a">https://qiita.com/sket88/items/4de708ce394179c61d8a</a></p>
<p class="it-Header_title">DockerでMySQL複数バージョンを共存させる
<a href="https://qiita.com/tanakaworld/items/427b94ea0435b5dccfa2">https://qiita.com/tanakaworld/items/427b94ea0435b5dccfa2</a></p>
<p class="it-Header_title">LaradockのMySQLに接続できなくてはまった話
<a href="https://qiita.com/dnrsm/items/4bd078c17bb0d6888647">https://qiita.com/dnrsm/items/4bd078c17bb0d6888647</a></p>
<p class="it-Header_title">laradockの環境設定からMySQL接続まで
<a href="https://qiita.com/yknsmullan/items/dea4102cf14b1b66e5af">https://qiita.com/yknsmullan/items/dea4102cf14b1b66e5af</a></p>
<p class="entry-title">docker起動でportが確保できないエラーの解決
<a href="https://nijoen.net/blog/773/">https://nijoen.net/blog/773/</a></p>
<p class="it-Header_title">Dockerでコンテナの停止・削除ができなくなった時の対処法
<a href="https://qiita.com/musatarosu/items/31d6293a93e75ca6073e">https://qiita.com/musatarosu/items/31d6293a93e75ca6073e</a></p>
<p class="it-Header_title">docker docker-compose コマンド
<a href="https://qiita.com/souichirou/items/6e701f6469822a641bdd">https://qiita.com/souichirou/items/6e701f6469822a641bdd</a></p>

<h3>参考書籍</h3>
https://www.amazon.co.jp/PHP%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AF-Laravel-Web%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E9%96%8B%E7%99%BA-%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B35-5-LTS%E5%AF%BE%E5%BF%9C/dp/4802611846