はじめに
Docker for WindowsでLaradockの環境構築をして、Webアプリが作れるところまで記載しております。
DBに関してはMySQLでphpmyadminも利用できるようにしています。
※なおDockerのインストールに関しては割愛させていただいております。
環境構築
最初に大まかなアプリ制作までの流れをまとめておきます。Laradockの起動
※Dockerのインストール後ですフォルダ作成。
$ mkdir laravel_app
$ cd laravel_app
git cloneコマンドでLaradockのダウンロード後し.envファイルを作成
$ git clone https://github.com/laradock/laradock.git
$ cd laradock
$ cp env-example .env
.envファイルを編集(※MySQLのバージョンは8.0以上になっているとセキュリティの関係でDockerがうまく動作しないらしい)
APP_CODE_PATH_HOST=../laravel #laravelのプロジェクトファイル名に書き換え
DATA_PATH_HOST=../data #複数データを参照してしまう可能性があるため
COMPOSE_PROJECT_NAME=docker_mysql #dockerのコンテナ名を変更
MYSQL_VERSION=5.7 #latestから変更
DB_HOST=mysql #追記
(僕の場合は更にdocker-compose.ymlのphpmyadminのポート番号を8081に変更。※原因不明&後述※)
(MySQL Notifierインストールされてる方はこちらも毎回起動するので停止させておく。)
コンテナの初期化(実行コマンド※Dockerアプリは起動した状態※)
$ docker-compose up -d nginx mysql workspace phpmyadmin
プロジェクトの作成
プロジェクト作成$ docker-compose exec workspace composer create-project --prefer-dist laravel/laravel . "6.8.*"
Application key set successfully.
Laravelアプリ トップ画面 http://localhost/
phpmyadmin トップ画面 http://localhost:8081/
DB作成は以下でphpmyadminにログインして作成します。(もしくはコマンドで)
サーバ名:mysql
ユーザー名:root
パスワード:root
Laravelプロジェクト下の.envファイルを編集。
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=docker_mysql // phpMyAdminで作ったDB名に合わせる。
DB_USERNAME=root
DB_PASSWORD=root
コントローラー作成
$ docker-compose exec workspace php artisan make:controller ArticleController
Controller created successfully.
マイグレーションファイル作成
$ docker-compose exec workspace php artisan make:migration create_articles_table --create=articles
Created Migration: 2020_03_24_092458_create_articles_table
マイグレート
$ 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)
その他の主要コマンド
起動の確認
statusがupになっていれば起動中です。$ docker ps
サービスの終了
docker-compose stop
再起動
docker-compose up -d nginx mysql workspace phpmyadmin
躓きポイント
ここからが僕がDockerでの環境構築で躓いた部分です。docker-compose upでMySQLが起動しない問題
原因のほとんどはポート被りです。対処法:①ローカルに落としているMySQLをオフにする②XAMPPのMySQLをオフにする
以下、エラー発生時の例。3306ポートが使えないの図。
対処法①ローカルに落としているMySQLをオフにする
Windowsでしたら以下のようにタスクバーを確認してください。MySQLがいたらそいつが原因の可能性が高いです。
こいつを停止しましょう。
その後、コマンドを実行すると3306でも起動するようになります。
対処法②XAMPPのMySQLをオフにする
上記と同じように、もしXAMPPでMySQLを起動していたとしたらエラーの原因になります。こちらもStopしてから再起動すれば起動します。
ちなみに両方共存させたくてポート番号を変更したい場合は以下です。
.envファイル上で3306と記載の部分を3307に変更して再度compose upすると3307で起動します。
phpMyAdminが起動しない問題
対処法:ポート番号を変更する。
docker-compose.ymlのphpmyadminのポート番号を8081に変更。//ポートのみ変更した場合
phpmyadmin:
build: ./phpmyadmin
environment:
- PMA_ARBITRARY=1
- MYSQL_USER=root
- MYSQL_PASSWORD=password
- MYSQL_ROOT_PASSWORD=password
ports:
- 8081:80
//サーバ名を調べるのに試行錯誤したパターン。※ログインエラー。
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
その後コマンドを実行すると起動します。
※8080ポートが何に使用されているのか原因は掴めませんでした。。。わかり次第追記します。
phpMyAdminログインできない問題
正直、これは既に上述の内容ができていればわかることなのですが。。。そこに至るまでに個人的に躓いたことだったので一応記載しておきます。
対処法:①.envファイルに従う②rootユーザーでログインする。
http://localhost:8081でphpmyadminへアクセス。
以下の画面になります。
XAMPPではこのような画面は出ないので困惑する人も多いはず。。。
対処法:①.envファイルに従う
laravel-practiceの.envに従い入力したところログインに成功。 サーバ:mysql ユーザー:default パスワード:secret以下参照
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3307
DB_DATABASE=default
DB_USERNAME=default
DB_PASSWORD=secret
※ただしこちらは編集権限がありません。(意味ない。。。)
対処法:②rootユーザーでログインする。
実は.envファイルに以下のような記載があります。MYSQL_ROOT_PASSWORD=root
以上で、ログインすると編集できます◎
また、コマンドラインでも以下のように実行可能です。
mysql -u root -p root //こちらからもアクセス可能
create database default; //DB作成
おわりに
あまりにもわかりにくい記事だったため大幅に内容を修正しました。以前の格闘感丸出しの記事は一応こちらにございます。
参考記事
Windows10でLaradockを使ってLaravel 5.5環境を作る https://qiita.com/sket88/items/4de708ce394179c61d8a
DockerでMySQL複数バージョンを共存させる https://qiita.com/tanakaworld/items/427b94ea0435b5dccfa2
LaradockのMySQLに接続できなくてはまった話 https://qiita.com/dnrsm/items/4bd078c17bb0d6888647
laradockの環境設定からMySQL接続まで https://qiita.com/yknsmullan/items/dea4102cf14b1b66e5af
docker起動でportが確保できないエラーの解決 https://nijoen.net/blog/773/
Dockerでコンテナの停止・削除ができなくなった時の対処法 https://qiita.com/musatarosu/items/31d6293a93e75ca6073e
docker docker-compose コマンド https://qiita.com/souichirou/items/6e701f6469822a641bdd