Laradockの使い方をメモっとく
- macOS High Sierra
- Docker for mac
- Laradock http://laradock.io/
こんな感じにします。
- blogという名前でlaravelディレクトリをつくる
- laravel5.5 mysql8 nginxという構成
【注意点】
最初のdocker-compose upはとても時間がかかる。
mysqlはlatestとなっているのでversionは自動的にmysql8になる
project
└ laradock
└ blog
永続化しするファイルの場所をプロジェクト内にする
これはお好みで
# Choose storage path on your machine. For all storage systems
DATA_PATH_HOST=.laradock/data
nginxのルートのディレクトリ変更
root /var/www/ 「laravelのプロジェクト名」 /public;
mysalのconfに追記
# The MySQL Client configuration file.
#
# For explanations see
# http://dev.mysql.com/doc/mysql/en/server-system-variables.html
[mysql]
default-character-set=utf8mb4
[mysqld]
sql-mode="STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION"
default-authentication-plugin = mysql_native_password
character_set_server=utf8mb4
init-connect='SET NAMES utf8mb4'
collation_server=utf8mb4_unicode_ci
skip-character-set-client-handshake
使うimageを指定してdocker-compose
docker-compose up -d nginx mysql
mysqlについて
laradockではrootとdefaultの2つのユーザーがある
laradockの.envにこのように記載がある
なので、2つのユーザーが存在する
- 全権限をもっとrootユーザー
- defaultデータベースのみの権限を与えられたdefaultユーザー
### MYSQL #################################################
MYSQL_VERSION=latest #最新version
MYSQL_DATABASE=default #DB名 default
MYSQL_USER=default #DBユーザー名 default
MYSQL_PASSWORD=secret #上記ユーザーのパスワード
MYSQL_PORT=3306
MYSQL_ROOT_PASSWORD=root #rootユーザーのパスワードもrootに設定
MYSQL_ENTRYPOINT_INITDB=./mysql/docker-entrypoint-initdb.d
mysqlに入りたい
docker exec -it mysqlのid bash
とりあえずrootで入る
mysql -u root -p
#パスワードもroot
laravel本体をインストール
下記のディレクトリ構成になるようにインストール
laradockとは並列になるディレクトリ構成に。
project
└ laradock
└ laravel本体
composer create-project --prefer-dist laravel/laravel プロジェクト名 "5.5.*"
laravelの設定ファイルをいろいろ
.envファイル
とりあえずmysqlユーザーはrootでやるならこれ
DB_CONNECTION=mysql
DB_HOST=mysql #変更
DB_PORT=3306
DB_DATABASE=default #変更
DB_USERNAME=root #変更
DB_PASSWORD=root #変更
こんなエラーがでる
mysql8の認証プラグイン問題
PDO::__construct(): The server requested authentication method unknown to the client [caching_sha2_password]
MySQL5.7までの認証プラグインには mysql_native_password がデフォルトで使用されていたが、
MySQL8から追加されたcaching_sha2_passwordという認証プラグインに変更された
現状のユーザーの認証方法を確認してみる
SELECT user, host, plugin FROM mysql.user;
mysql> SELECT user, host, plugin FROM mysql.user;
+------------------+-----------+-----------------------+
| user | host | plugin |
+------------------+-----------+-----------------------+
| default | % | caching_sha2_password |
| root | % | caching_sha2_password |
| mysql.infoschema | localhost | caching_sha2_password |
| mysql.session | localhost | caching_sha2_password |
| mysql.sys | localhost | caching_sha2_password |
| root | localhost | caching_sha2_password |
+------------------+-----------+-----------------------+
6 rows in set (0.00 sec)
全部、caching_sha2_password となっていますね。
では、デフォルトに設定されている認証プラグインを確認
show variables like 'default_authentication_plugin';
じゃあユーザーの認証方法変更しちゃおう
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'P@ssw0rd';
ちなみにP@ssw0rdてやっているはわざとです。
下記だとダメです。
このパスワードもルールがあるので。
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
文字化けすんじゃねーか
mysqlの文字コードを確認
docker-compose exec mysql bash
mysql -u root -p
P@ssw0rd
show variables like '%char%';
mysql8から下記はデフォルトがutf8になっている
character_set_database
character_set_server
[mysql]
# 追加
default-character-set=utf8mb4
[mysqld]
sql-mode="STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION"
default_authentication_plugin=mysql_native_password
#追加
init-connect='SET NAMES utf8mb4'
collation_server=utf8mb4_unicode_ci
character_set_server=utf8mb4
skip-character-set-client-handshake
1、DATA_PATH_HOST=~/.laradock/dataの中にmysqlディレクトリがあって、こいつをディレクトリごと削除
2、laradock_mysqlのイメージを削除
3、mysqlのイメージを削除
4、mysqlをno-cacheで再build
rm -rf ~/.laradock/data/mysql
docker rmi laradock_mysql -f
docker rmi mysql -f
docker-compose build --no-cache mysql
mysqlのmy.cnfを書き換えた後、反映させたい!
docker-compose stop
#永続化されているデータを丸っと削除
rm -rf .laradock
#mysqlを再度build
docker-compose up -d --build mysql
ふう
Author And Source
この問題について(Laradockの使い方をメモっとく), 我々は、より多くの情報をここで見つけました https://qiita.com/dokkoisho/items/651a65ddcce25e9921b9著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .