2022/04/10
はじめに
私は開発において利用する DB にはローカルの Docker を使っている.その上で,postgresql
/ mysql
等の DB とadminer
を併用することでデータの可視化およびデータの管理を行うことが多い.
DB コンテナに渡す環境変数によってコンテナ起動時に Database を自動生成することができるのだが,複数の Database を作るのに,adminer
を介して行っていたのだが,これだと開発者体験がよろしくない.
一人での開発であれば「面倒だなぁ」で済むのだが,複数人開発となると手間の掛かり具合が一気に跳ね上がる.
その背景から,複数の Database をコンテナ起動時に自動生成する方法をまとめ,記しておく.
達成したいもの
前項で記したとおり,コンテナ起動時に複数 Database を自動生成したい.
ここでは,test1
とtest2
を自動作成することにした.
MySQL および Postgres に分け,各設定を記載する.
続く設定を施した後, docker-compose up
によって,コンテナを設定できる.(バックグラウンド実行するためには,docker-compose up -d
とするとよい)
MySQL の場合
実は,MySQL に対する設定はキレイにまとまっているページがあり,そこから学習した.
ディレクトリ構成
.
├── docker-compose.yml # コンテナの設定を記述
└── mysql-init # DB初期化用のSQLを格納するディレクトリ
└── 01.sql # コンテナ起動時に実行されるSQL
コンテナ設定
version: '3'
services:
db:
image: mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: root
volumes:
- ./mysql-init:/docker-entrypoint-initdb.d
ports:
- 3306:3306
adminer:
image: adminer
restart: always
ports:
- 8080:8080
DB のみ起動されればよい場合はadminer
項は削除してしまっても構わない.
また,この設定では,adminer
(http:/localhost:8080)を開いてログインする際は,MySQL/db/root/root
で入れる.
MySQL のコンテナにおいては,環境変数MYSQL_DATABASE
によって Database を生成できるのだが,SQL 実行によって Database を作成するため,こちらには書かず,DB 設定の方でどちらも作成することにした.
DB 設定
CREATE DATABASE IF NOT EXISTS `test1`;
CREATE DATABASE IF NOT EXISTS `test2`;
この SQL は,コンテナ起動時に実行される(docker-compose.yml
にそう設定されている).そのため,シンプルにテーブルを作成する文である.
Postgres の場合
MySQL に対する方法を拡張し,Postgres に対応してみた.
大枠は変えずに,Postgres への適用を行った.
ディレクトリ構成
.
├── docker-compose.yml # コンテナの設定を記述
└── postgres-init # DB初期化用のSQLを格納するディレクトリ
└── 01.sql # コンテナ起動時に実行されるSQL
コンテナ設定
version: '3'
services:
db:
image: postgres
restart: always
environment:
POSTGRES_USER: root
POSTGRES_PASSWORD: root
volumes:
- ./postgres-init:/docker-entrypoint-initdb.d
ports:
- 5432:5432
adminer:
image: adminer
restart: always
ports:
- 8080:8080
この設定では,adminer
(http:/localhost:8080)を開いてログインする際は,PostgreSQL/db/root/root
で入れる.
Postgres のコンテナにおいては,環境変数POSTGRES_DB
によって Database を生成できるのだが,MySQL と同様の理由で値を入れない事にした.
DB 設定
MyQL で Database 作成したコマンドのままでは Postgres で同じことが出来ないので,Postgres において Database を作成するコマンドに書き換えた.
CREATE DATABASE test1;
CREATE DATABASE test2;
おわりに
多くの情報を参考ページからもらいました.是非そちらを主軸として本記事の内容を活用してみてください!