1
0

More than 5 years have passed since last update.

dockerで(nginxとphp-fpmと)mysqlを連携させたときのメモ

Last updated at Posted at 2019-02-06

前提

nginxはド素人。PHP(Laravel)の環境を作る必要があり、使ったことが無いnginxで動かしてみようという軽いノリで始めたメモ。
すでに、nginxに関するメモ有りphp-fpmに関するメモ有り
今回は既に作成し連携済のnginxとphp-fpmのコンテナに加えDBを連携させる為の設定メモ。

docker-compose.yml

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

db.docker
FROM mysql:latest

とりあえず最新版をつかう。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0