こんばんは。山崎 代三です。
つい先程アムレスのオンラインストア向けのブログを書き終わったばかりですが、休む間もなく、こちらを書きます。
本日の大人プログラミング部での目標は、
1. Sublime text のインストール
2. Laradock インストールの続き
3. 公式チュートリアルアプリを作る
でした。
Sublime textは Ubuntu の GUIインストーラーから難なくインストールできました。GUIっていいですね。
『Laradockインストールの続き』
まずは、.env ファイルのDB設定変更。
↓こうなっている部分を
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=laravel DB_USERNAME=root DB_PASSWORD=
↓こうするらしいです。
DB_CONNECTION=mysql DB_HOST=mysql DB_PORT=3306 DB_DATABASE=default DB_USERNAME=default DB_PASSWORD=secret
で、docker-compose 起動
$ docker-compose up -d nginx mysql phpmyadmin
状況確認します。
$ docker ps --format "table {{.Names}}"
NAMES
laradocklaratuto_nginx_1
laradocklaratuto_php-fpm_1
laradocklaratuto_workspace_1
laradocklaratuto_phpmyadmin_1
laradocklaratuto_docker-in-docker_1
laradocklaratuto_mysql_1
workspaceコンテナに接続して Laravel artisan も確認します。
$ docker-compose exec workspace bash # php artisan --version Laravel Framework 6.0.1 # exit
ええやん!
トラブル – mysql のテーブルが見えない
続いて mysqlコンテナに接続して defaultデータベースのテーブルを見ることにします。
$ docker-compose exec mysql bash # mysql --version mysql Ver 8.0.17 for Linux on x86_64 (MySQL Community Server - GPL) # mysql -u default -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 8 Server version: 8.0.17 MySQL Community Server - GPL Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
なんか超久しぶりの mysql ターミナルでドキドキします。
mysql> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| default |
| information_schema |
+--------------------+
2 rows in set (0.03 sec)
ここまでは良かった……。
mysql> SHOW TABLES FROM default; ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'default' at line 1
omg! シンタックスエラー!!!
ちなみに、
SHOW TABLES FROM information_schema;
は、まったく問題なく表示できます。
mysql> SHOW TABLES FROM information_schema; +---------------------------------------+ | Tables_in_information_schema | +---------------------------------------+ | CHARACTER_SETS | | CHECK_CONSTRAINTS | | COLLATIONS | | COLLATION_CHARACTER_SET_APPLICABILITY | | COLUMNS | | COLUMN_PRIVILEGES | | COLUMN_STATISTICS | | ENGINES | | EVENTS | | FILES | (中略) | TRIGGERS | | USER_PRIVILEGES | | VIEWS | | VIEW_ROUTINE_USAGE | | VIEW_TABLE_USAGE | +---------------------------------------+ 67 rows in set (0.03 sec) mysql> \q Bye # exit
では、ブラウザで、phpMyAdmin表示確認してみましょう。
http://localhost:8080
phpMyAdmin画面を表示しますが、何やら mysqlに接続できません。こんなエラーが表示されます。
mysqli_real_connect(): The server requested authentication method unknown to the client [caching_sha2_password] mysqli_real_connect(): (HY000/2054): The server requested authentication method unknown to the client
mysqlモニターで接続できないんだから、そりゃそうだ。
対策その1 – mysqlを再ビルド
まずは一旦 docker-composeを停止
$ docker-compose stop
Stopping laradocklaratuto_nginx_1 ... done
Stopping laradocklaratuto_php-fpm_1 ... done
Stopping laradocklaratuto_workspace_1 ... done
Stopping laradocklaratuto_phpmyadmin_1 ... done
Stopping laradocklaratuto_docker-in-docker_1 ... done
Stopping laradocklaratuto_mysql_1 ... done
docker-compose の状況確認
docker-compose ps Name Command State Ports --------------------------------------------------------------------------------------- laradocklaratuto_docker-in-docker_1 dockerd-entrypoint.sh Exit 0 laradocklaratuto_mysql_1 docker-entrypoint.sh mysqld Exit 0 laradocklaratuto_nginx_1 /bin/bash /opt/startup.sh Exit 137 laradocklaratuto_php-fpm_1 docker-php-entrypoint php-fpm Exit 0 laradocklaratuto_phpmyadmin_1 /docker-entrypoint.sh apac ... Exit 0 laradocklaratuto_workspace_1 /sbin/my_init Exit 0
ということで、mysql を再ビルド
$ docker-compose build mysql Building mysql Step 1/9 : ARG MYSQL_VERSION=latest Step 2/9 : FROM mysql:${MYSQL_VERSION} ---> 62a9f311b99c Step 3/9 : LABEL maintainer="Mahmoud Zalt <mahmoud@zalt.me>" ---> Using cache ---> 5058417d301b Step 4/9 : ARG TZ=UTC ---> Using cache ---> 8ebb90e16795 Step 5/9 : ENV TZ ${TZ} ---> Using cache ---> 95f61388e8ed Step 6/9 : RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone && chown -R mysql:root /var/lib/mysql/ ---> Using cache ---> aa0dfc41ec7d Step 7/9 : COPY my.cnf /etc/mysql/conf.d/my.cnf ---> Using cache ---> dab3a71488b5 Step 8/9 : CMD ["mysqld"] ---> Using cache ---> 101902f85ce6 Step 9/9 : EXPOSE 3306 ---> Using cache ---> 92e28e715cea Successfully built 92e28e715cea Successfully tagged laradocklaratuto_mysql:latest
なんかキャッシュが効いている感じですけど……とりあえず、docker-compose を再起動します。
$ docker-compose up -d nginx mysql phpmyadmin Starting laradocklaratuto_docker-in-docker_1 ... Starting laradocklaratuto_docker-in-docker_1 Starting laradocklaratuto_mysql_1 ... Starting laradocklaratuto_docker-in-docker_1 ... done Starting laradocklaratuto_workspace_1 ... Starting laradocklaratuto_mysql_1 ... done Starting laradocklaratuto_phpmyadmin_1 ... Starting laradocklaratuto_workspace_1 ... done Starting laradocklaratuto_php-fpm_1 ... Starting laradocklaratuto_php-fpm_1 ... done Starting laradocklaratuto_nginx_1 ... Starting laradocklaratuto_nginx_1 ... done
mysqlコンテナに接続し、mysqlモニターに入りまして〜
$ docker-compose exec mysql bash # mysql -u default -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 8 Server version: 8.0.17 MySQL Community Server - GPL Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
DB確認 – OK!
mysql> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | default | | information_schema | +--------------------+ 2 rows in set (0.03 sec)
defaultテーブルが見られない、またシンタックスエラー!
mysql> SHOW TABLES FROM default; ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'default' at line 1 mysql> \q Bye # exit
キャッシュが効いた状態だったのが、あかんかったんですかね〜?
次に進みましょう!
対策2 – キャッシュを使わずに mysql を再ビルド
mysql を –no-cache でリビルドすればええねんな〜!
ちゅーことで、docker-compose を停止
$ docker-compose stop Stopping laradocklaratuto_nginx_1 ... done Stopping laradocklaratuto_php-fpm_1 ... done Stopping laradocklaratuto_workspace_1 ... done Stopping laradocklaratuto_phpmyadmin_1 ... done Stopping laradocklaratuto_docker-in-docker_1 ... done Stopping laradocklaratuto_mysql_1 ... done
–no-cacheでビルド
$ docker-compose build --no-cache mysql Building mysql Step 1/9 : ARG MYSQL_VERSION=latest Step 2/9 : FROM mysql:${MYSQL_VERSION} ---> 62a9f311b99c Step 3/9 : LABEL maintainer="Mahmoud Zalt <mahmoud@zalt.me>" ---> Running in 71a61e56788b Removing intermediate container 71a61e56788b ---> 40aecf17e159 Step 4/9 : ARG TZ=UTC ---> Running in 964d476c105f Removing intermediate container 964d476c105f ---> e6717c7e9850 Step 5/9 : ENV TZ ${TZ} ---> Running in 029696b05e93 Removing intermediate container 029696b05e93 ---> 23645640fdf8 Step 6/9 : RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone && chown -R mysql:root /var/lib/mysql/ ---> Running in f6a9e640a719 Removing intermediate container f6a9e640a719 ---> 84372d2738b3 Step 7/9 : COPY my.cnf /etc/mysql/conf.d/my.cnf ---> a3271c2f9b4d Step 8/9 : CMD ["mysqld"] ---> Running in cd3ba1d7e53f Removing intermediate container cd3ba1d7e53f ---> 2fe7ca3c4f0d Step 9/9 : EXPOSE 3306 ---> Running in 790c9197039d Removing intermediate container 790c9197039d ---> 2fdb99b2b437 Successfully built 2fdb99b2b437 Successfully tagged laradocklaratuto_mysql:latest
キャッシュを使わずリビルドできたようです。
ということで、先程と同じことを行いました。(途中省略して、mysqlモニターのみ)
mysql> SHOW TABLES FROM default; ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'default' at line 1 mysql> \q Bye # exit
いつもいつも、シンタックス・エラーって何やねん!綴りはあってんで〜!
それにしても開発環境を構築できないとは……。
もしかしてノートパソコンの充電が切れてたから、何かファイルが壊れたかな?
mysql リムーブ
mysqlだけ、入れ直すということを決め、コンテナとイメージを削除しました。ターミナル履歴のコピーを取り忘れたので、コマンドだけ記述します。
mysql コンテナ削除
$ docker rm e802567fac63
mysql イメージ削除
$ docker rmi 2fdb99b2b437D
ということで、本日は時間となりました。
まとめ
なかなか思い通りには行きませんが、仕事に直接関係無いこともあり、余裕をもってあれこれ試せるのは良いですね。
今回の参加者は、Nさん、Mさん、初参加のWさん、そして私でした。
今回の参考サイト
初心者がLaradockでLaravelを開発するための準備の仕方をまとめるよ | 東京上野のWeb制作会社LIG
https://liginc.co.jp/465420
テーブルの一覧を表示する – MySQL 逆引きリファレンス
http://mysql.javarou.com/dat/000393.html
データベースの一覧を表示する – MySQL 逆引きリファレンス
http://mysql.javarou.com/dat/000418.html
mysqlコマンド関連:MySQL 逆引きリファレンス
http://mysql.javarou.com/category/173.html
コマンドラインから MySQL に接続する – MySQL 逆引きリファレンス
http://mysql.javarou.com/dat/000389.html
【Docker】MySQL8.0系を使う時に発生する問題について – websandbag ブログ
https://blog.websandbag.com/entry/2018/05/17/121730
docker-compose コマンドまとめ – Qiita
https://qiita.com/wasanx25/items/d47caf37b79e855af95f#rm
初心者向けdocker-composeコマンド逆引き – Qiita
https://qiita.com/okyk/items/a374ddb3f853d1688820
docker-compose up vs docker-compose up –build vs docker-compose build –no-cache – Stack Overflow
https://stackoverflow.com/questions/39988844/docker-compose-up-vs-docker-compose-up-build-vs-docker-compose-build-no-cach/39988980
docker-composeでbuildする時にcacheを使わない – Qiita
https://qiita.com/setouchi/items/e01557ae4647b8e3b1bc
docker-composeでbuildする時にcacheを使わない – 塩焼きブログ
https://sioyaki.com/entry/2016/06/16/095357
LaradockのMySQLに接続できなくてはまった話 – Qiita
https://qiita.com/dnrsm/items/4bd078c17bb0d6888647
【2019年2月】Laradockの初期環境設定方法 – Qiita
https://qiita.com/don-bu-rakko/items/0297280553e99aa6d7b8
Dockerイメージとコンテナの削除方法 – Qiita
https://qiita.com/tifa2chan/items/e9aa408244687a63a0ae
あとがき
帰りの車の中で、今回の沼にはまった原因を考えていた時、システムの破損によるシンタックスエラーというよりは、mysqlのバージョン指定 or セキュリティ設定に問題があるのではないかと思い当たりました。
mysqlはバージョン 8.0だとセキュリティが厳しいので、設定にひと工夫が必要みたいです。
改めて、今回の環境構築の参考サイトを見てみると、mysqlのバージョンを 5.7に指定して環境構築していました orz。
8.0で突っ張るか、5.7に日和るか……ちょっと悩みます。勉強のためには 8.0が良いんでしょうけど。
私の息子も Laradock での環境構築を行っています。私より後に始めたのに、すでにアプリを作り始めています。遥かに先に……。