Posted at

Docker MySQLコンテナ起動時に初期データを投入する

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を書きます。


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ファイルの作成

ここでは、以下のようなテーブル作成と初期データを登録してみます。


Employee.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ファイルが実行され、初期データが登録されます。

以上です。