公式サンプルを公式Dockerイメージに入れる(MySQL編)
はじめに
サンプルデータベースが欲しくなったのですが、最近は見かけないような気がします。
昔々は、scott/tiger でつないで EMP テーブルで練習するのがお約束でしたが…。
調べてみることにしました。
最初は、サンプルデータベースの場所だけの備忘録にしようと思ったのですが、ちょっとデータベースを使ったデモとかテストが必要になったので、サンプルデータベース入りの Docker イメージを作って、イメージを作る材料もイメージも公開しようと思います。
MySQL 編
MySQL には似たような記事がいくつかあります(苦笑)。
基本的には、以前の PostgreSQL の派生形なので、同じです。
公式 Docker イメージ
オフィシャルイメージは、以下にあります。
このイメージをメンテナンスしているのが、以下です。
このオフィシャルイメージの Initializing a fresh instance
に書かれています。
When a container is started for the first time, a new database with the specified name will be created and initialized with the provided configuration variables. Furthermore, it will execute files with extensions .sh, .sql and .sql.gz that are found in /docker-entrypoint-initdb.d. Files will be executed in alphabetical order. You can easily populate your mysql services by mounting a SQL dump into that directory and provide custom images with contributed data. SQL files will be imported by default to the database specified by the MYSQL_DATABASE variable.
なので、これまで同様、.sql
や .sh
を /docker-entrypoint-initdb.d
に置いておけば良いということです。
公式サンプル
公式サンプルは、以下にありました。
今回は、sakila database
を組み込むことにします。
Docker イメージを作る
本当は、作らなくても、/docker-entrypoint-initdb.d
を -v
でマウントすれば終了なんだけど、組み込んでしまった方が楽なんじゃないの?ということで作ります。
SQLファイル
sakila-db.tar.gz
を解凍して、sakila-schema.sql
と sakila-data.sql
を使います。
Docker イメージの大きさの問題もあるので、build する際は、.sql.gz
に圧縮します。
Dockerfile
FROM mysql
COPY ./sakila-db/sakila-schema.sql.gz /docker-entrypoint-initdb.d/01.sql.gz
COPY ./sakila-db/sakila-data.sql.gz /docker-entrypoint-initdb.d/02.sql.gz
そのまんまです。
コピー先を 01.sql.gz
と 02.sql.gz
にしているのは、オフィシャルイメージに書いてあった Files will be executed in alphabetical order.
対策です。
Makefile
.PHONY: build run push clean
IMAGE=docker.io/take0a/mysql-sakila
CONTAINER=mysql01
PASSWORD=password
build: clean
gzip -k sakila-db/*.sql
docker build . -t $(IMAGE) --no-cache
run:
docker run --name $(CONTAINER) -dit -e MYSQL_ROOT_PASSWORD=$(PASSWORD) $(IMAGE)
docker exec -it $(CONTAINER) /usr/bin/mysql -p
push:
docker push $(IMAGE)
clean:
docker container rm $(CONTAINER) -f
docker image rm $(IMAGE) -f
rm -f sakila-db/*.sql.gz
こんな感じにしておくと、コマンドを忘れて「あわわ」しなくてすみます。
Docker イメージ
以下で公開しました。
docker pull take0a/mysql-sakila
で pull できます。
GitHub リポジトリ
以下で公開しました。
他のデータベースのものも公開したら、少しきれいにしておきます。
おわりに
やはり、サンプルデータベースは必要ですよね。
Discussion