Dockerなど複数DBを立ち上げる方法Tipsです。
MySQL のコンテナにおいては,環境変数MYSQL_DATABASE
によって自動でDBを生成できます。
しかし1つのDBしか自動で生成できず、テスト用のDBなどは分けたい場合、DB作成スクリプトを起動時に実行したりするなどで対処していました。
しかしmysqlのimageを見ると起動時にスクリプトを渡すことができ、簡単にDBを2つ作成できたので共有Tipsとして残しておきます。
各構成
実現するための各構成です。
ディレクトリ構成
.
├── docker-compose.yml # コンテナの設定を記述
└── mysql-init # DB初期化用のSQLを格納するディレクトリ
└── 01.sql # コンテナ起動時に実行されるSQL
コンテナ設定
version: '3'
services:
db:
image: mysql
restart: always
environment:
MYSQL_HOST: db
MYSQL_DATABASE: db
MYSQL_PORT: 3306
MYSQL_USER: user
MYSQL_ROOT_PASSWORD: password
MYSQL_PASSWORD: password
volumes:
- ./mysql-init:/docker-entrypoint-initdb.d
ports:
- 3306:3306
0.1sql
CREATE DATABASE IF NOT EXISTS `db_test`;
コードを見ればわかると思いますが、要はホスト側で作成したsqlファイルをDockerへバインドマウントしているだけです。
そうすればdockerの起動時、スクリプトが実行されdbが作成されます。
今回の場合だと環境変数でも設定していますが無事に2つ作成されます。
以上です。
参考
https://onexlab-io.medium.com/docker-compose-mysql-multiple-database-fe640938e06b