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

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

備忘録として残しておきたいと思います。

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

ファイル

【階層】
階層は下の通りです。


build_mysql
 ├─docker-compose.yml 
 └─initdb.d
    └─init.sql

【docker-compose】
下記ように書くことで、docker-compose.ymlと同階層にある「initdb.d」という名前のディレクトリ配下の「.sql」「.sh」「.sql.gz」ファイルを実行してくれます。


version: "3"

services:
  mysql:
    image: mysql:latest
    container_name: mysql_container
    environment:
      -  MYSQL_ROOT_PASSWORD=rootpassword
    volumes:
      - ./initdb.d:/docker-entrypoint-initdb.d
    restart: always

【init.sql】
データベース、テーブルを作成して初期データとして名前を入れてみます。


DROP DATABASE IF EXISTS test_db;
CREATE DATABASE test_db;
USE test_db;
DROP TABLE IF EXISTS test_table;
 
CREATE TABLE test_table (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
name TEXT NOT NULL
)DEFAULT CHARACTER SET=utf8;
 
INSERT INTO test_table (name) VALUES ("john"),("alex"),("ben");

確認


# コンテナ作成
docker-compose up -d
Creating mysql_container ... done

# mysqlに接続
docker exec -it mysql_container mysql -u root -p

# DBに接続 
use test_db;

# 初期データの確認
select * from test_table;
+----+------+
| id | name |
+----+------+
|  1 | john |
|  2 | alex |
|  3 | ben  |
+----+------+