Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

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

以上です。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away