#前提
nginxはド素人。PHP(Laravel)の環境を作る必要があり、使ったことが無いnginxで動かしてみようという軽いノリで始めたメモ。
すでに、nginxに関するメモ有り。php-fpmに関するメモ有り。
今回は既に作成し連携済のnginxとphp-fpmのコンテナに加えDBを連携させる為の設定メモ。
#docker-compose.yml
version: '3'
services:
web:
build:
context: ./docker
dockerfile: web.docker
container_name: web00
depends_on:
- app00
ports:
- 8080:80
volumes:
- ./proj/var/www/html:/var/www/html
- ./docker/nginx.conf:/etc/nginx/conf.d/default.conf
networks:
- proj-net
app:
build:
context: ./docker
dockerfile: app.docker
container_name: app00
depends_on:
- db00
volumes:
- ./src/var/www/html:/var/www/html
networks:
- proj-net
db:
build:
context: ./docker
dockerfile: db.docker
container_name: db00
command: --default-authentication-plugin=mysql_native_password
restart: always
volumes:
- ./db:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: projdb
MYSQL_USER: proj
MYSQL_PASSWORD: password
networks:
- proj-net
network:
- proj-net
##command:
mysqlのイメージは最新版を利用するのだが、後ほどLaravelと連携する際に問題が発生してしまう。
どうやら、mysqlの最新版(現時点ではVer.8)では認証方式が caching_sha2_passwordと言うモノになっているらしい。これを、 mysql_native_passwordに変更しなければならなかったので、--default-authentication-plugin=mysql_native_password
を付加している。
正しく設定できたかどうかは環境構築後にdocker-compose exec db mysql -u root -p -e "select user,plugin from mysql.user;"
を実施すれば良い。
+------------------+-----------------------+
| user | plugin |
+------------------+-----------------------+
| proj | mysql_native_password |
| root | mysql_native_password |
| mysql.infoschema | caching_sha2_password |
| mysql.session | caching_sha2_password |
| mysql.sys | caching_sha2_password |
| root | mysql_native_password |
+------------------+-----------------------+
##volumes:
データの永続化の為に設定。ただし注意が必要。docker-composeによって気軽に環境構築を繰り返せるが、この設定を行うと構築済の設定が残ってしまうためdocker-compose.ymlに加えられた変更が反映しないことがある。docker-compose.ymlを変更し構築し直す場合には、以前mysqlによって生成されたファイル群は隔離しておく必要がある。
#./docker/db.docker
FROM mysql:latest
とりあえず最新版をつかう。