DockerのMySQLイメージは、「/docker-entrypoint-initdb.d」にマウントしたディレクトリに「.sql」「.sh」「.sql.gz」という拡張子でファイルを配置しておくと、MySQLイメージからコンテナを生成・起動する時に、それらのファイルを読み込み実行してくれます。この仕組みを利用して、MySQLコンテナ生成・起動時に初期データを登録してみます。
https://docs.docker.com/samples/library/mysql/#docker-secrets
※Initializing a fresh instance
前提
- Dockerがインストールされていること
docker-compose.ymlの作成
まずは、docker-compose.ymlを書きます。
db:
image: mysql:latest
volumes:
- ./initdb.d:/docker-entrypoint-initdb.d
environment:
- MYSQL_ROOT_PASSWORD=root
このように書くことで、docker-compose.ymlと同階層にある「initdb.d」という名前のディレクトリ配下の「.sql」「.sh」「.sql.gz」ファイルを実行してくれます。
初期データ登録用SQLファイルの作成
ここでは、以下のようなテーブル作成と初期データを登録してみます。
DROP SCHEMA IF EXISTS sample;
CREATE SCHEMA sample;
USE sample;
DROP TABLE IF EXISTS employee;
CREATE TABLE employee
(
id INT(10),
name VARCHAR(40)
);
INSERT INTO employee (id, name) VALUES (1, "Nagaoka");
INSERT INTO employee (id, name) VALUES (2, "Tanaka");
MySQLイメージからコンテナ生成・起動
以下のコマンドでMySQLイメージからコンテナの生成・起動を行います。
docker-compose up
上記コマンドにより、docker-compose.ymlでdocker-entrypoint-initdb.dにマウントしたディレクトリ(今回の例でいうと、./initdb.dディレクトリ)にあるSQLファイルが実行され、初期データが登録されます。
以上です。