Docker環境のmysql初期立ち上げ時に、実行するSQLの設定
基本的なmysqlの環境構築については、下記を参照。
テンプレート
初期稼働時のSQLを実行するためには、エンドポイントを指定する必要があるらしい。
エンドポイントの名称は docker-entrypoint-initdb.d 。
下記は、それを含んだテンプレートになる。
version: '3'
services:
# MySQL
db:
image: mysql:5.7
container_name: mysql_base
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: test_database
MYSQL_USER: docker
MYSQL_PASSWORD: docker
TZ: 'Asia/Tokyo'
volumes:
- ./data:/var/lib/mysql
- ./log:/var/log
- ./conf/my.cnf:/etc/mysql/conf.d/my.cnf
- ./init_dir:/docker-entrypoint-initdb.d
ports:
- 3306:3306
networks:
- external.group
networks:
external.group:
external: true指定しているディレクトリに n.sql を設置し、起動することで初期起動時に実行される。
CREATE DATABASE IF NOT EXISTS `mysql_base`;
grant all privileges on `test_`test_database`.* to 'docker'@'%';
DROP DATABASE IF EXISTS `mysql_base`;用途
実際の場面で使用するのは、新しく環境を作成する際に、初期データが必要な時に、用意しておくと、あとから手で入力する手間が省ける。
このケースでは、DjangoのTestCaseを実行する際に、テスト用のデータベースに権限を作成しなければならず、無理やりだが、テスト用のデータベースを作成後、権限を付与、その後に削除するという苦肉の策をとっている。


