初期データ
initdb.d
フォルダを作成してinit.sql
とpet.txt
を配置する。
init.sql
の内容はテーブル削除、作成とデータ挿入を記述
init.sql
drop table if exists pet;
create table if not exists pet (
name varchar(20)
, owner varchar(20)
, species varchar(20)
, sex char(1)
, birth date
, death date
);
load data local infile '/docker-entrypoint-initdb.d/pet.txt' into table pet;
pet.txt
の内容はテーブルに挿入するデータをcsv形式で記述
pet.txt
Fluffy Harold cat f 1993-02-04 \N
Claws Gwen cat m 1994-03-17 \N
Buffy Harold dog f 1989-05-13 \N
Fang Benny dog m 1990-08-27 \N
Bowser Diane dog m 1979-08-31 1995-07-29
Chirpy Gwen bird f 1998-09-11 \N
Whistler Gwen bird \N 1997-12-09 \N
Slim Benny snake m 1996-04-29 \N
設定
docker-compose.yml
のvolumes
に初期データフォルダを記述する。
ローカルのinitdb.d
フォルダをコンテナ内にdocker-entrypoint-initdb.d
フォルダで配置する。
dockerhub - mysql
docker-compose.yml
version: '3.8'
services:
mysql:
image: mysql:5.7
ports:
- "3306:3306"
volumes:
- db_data:/var/lib/mysql
- ./initdb.d:/docker-entrypoint-initdb.d
restart: always
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: my_test
MYSQL_USER: mysql
MYSQL_PASSWORD: mysql
volumes:
db_data: {}
起動
いつも通りにコンテナを起動する。
$ docker-compose up -d
終わり
起動後にデータを入れ直す
コンテナをdown --volumes
して再度up
すれば良いんだろうけど。。。
別の方法と言うことで、
コンテナ内に入る。
$ docker-compose exec mysql /bin/bash
コンテナ内でmysqlコマンドをバッチモードで実行する。
# mysql -u mysql --password=mysql my_test < /docker-entrypoint-initdb.d/init.sql
コンテナ内から出る。
# exit
ほんとに終わり