Docker で MySQL 起動時に DB 処理を行う

Docker Hub にある MySQL イメージは、コンテナの初回の起動時(ボリューム生成時?)に Docker で生成される DB に対して処理を行うことができます。
処理内容は、MySQL コンテナ内の /docker-entrypoint-initdb.d 以下に設置されている .sql, .sh, .sql.gz の拡張子を持つファイルを実行するものになります。
実行順序はファイル名順です。
オフィシャルな説明は下記をどうぞ。
https://docs.docker.com/samples/library/mysql/#initializing-a-fresh-instance

使用例

一般的な Docker での MySQL の使用例は、Docker Compose で MySQLを構築 を参照。
起動時に DB 処理を行いたい場合には、上記に加えて、まずは以下のように /docker-entrypoint-initdb.d を mount します。

db:
  volumes:
    - ./initdb.d:/docker-entrypoint-initdb.d

次に、initdb.d/ 以下に実行したいファイルを置きます。
例えば、下記のようなファイルを作成します。

CREATE DATABASE IF NOT EXISTS testdb DEFAULT CHARACTER SET utf8;
use testdb;
CREATE TABLE users (
....

docker-compose up してコンテナを生成/起動すると、起動時に上記の SQL が実行されます。
なお、docker-compose.yml で MYSQL_DATABASE 変数を設定しておけば、単純な create database は不要になり、その後の SQL の実行でも MYSQL_DATABASE を参照してくれるので use … は不要になります。

コメント

タイトルとURLをコピーしました