128
107

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

アルス・ウェアーAdvent Calendar 2018

Day 18

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

Posted at

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

以上です。

128
107
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
128
107

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?