公式サンプルを公式Dockerイメージに入れる(MariaDB編)
はじめに
サンプルデータベースが欲しくなったのですが、最近は見かけないような気がします。
昔々は、scott/tiger でつないで EMP テーブルで練習するのがお約束でしたが…。
調べてみることにしました。
最初は、サンプルデータベースの場所だけの備忘録にしようと思ったのですが、ちょっとデータベースを使ったデモとかテストが必要になったので、サンプルデータベース入りの Docker イメージを作って、イメージを作る材料もイメージも公開しようと思います。
MariaDB 編
MySQL には似たような記事がいくつかあります(苦笑)。
基本的には、以前の PostgreSQL の派生形なので、同じです。
公式 Docker イメージ
オフィシャルイメージは、以下にあります。
このイメージをメンテナンスしているのが、以下です。
PostgreSQL や MySQL と GitHub のオーナーは違うようです。
このオフィシャルイメージの Initializing the database contents
に書かれています。ここは微妙にちがうのですね。
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, .sql.gz, .sql.xz and .sql.zst that are found in /docker-entrypoint-initdb.d. Files will be executed in alphabetical order. .sh files without file execute permission are sourced rather than executed. You can easily populate your mariadb 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 MARIADB_DATABASE variable.
なので、これまで同様、.sql
や .sh
を /docker-entrypoint-initdb.d
に置いておけば良いということです。
公式サンプル
公式サンプルは、以下にありました。
今回は、MariaDB HTAP Quickstart を組み込むことにします。
Docker イメージを作る
本当は、作らなくても、/docker-entrypoint-initdb.d
を -v
でマウントすれば終了なんだけど、組み込んでしまった方が楽なんじゃないの?ということで作ります。
SQLファイル
MariaDB HTAP Quickstart をダウンロードします。
しかしながら、公式コンテナにない cpimport でデータを投入している ColumnStore の flights.csv は、除外しておきます。
Dockerfile
FROM mariadb
COPY ./mariadb-htap-quickstart/create_and_load.sh /docker-entrypoint-initdb.d/01.sh
COPY ./mariadb-htap-quickstart/sql/schema.sql /docker-entrypoint-initdb.d/sql/schema.sql
COPY ./mariadb-htap-quickstart/data/airlines.csv /docker-entrypoint-initdb.d/data/airlines.csv
COPY ./mariadb-htap-quickstart/data/airports.csv /docker-entrypoint-initdb.d/data/airports.csv
# COPY ./mariadb-htap-quickstart/data/flights.csv /docker-entrypoint-initdb.d/data/flights.csv
コピー先を 01.sh
にしているのは、オフィシャルイメージに書いてあった Files will be executed in alphabetical order.
対策です。
Makefile
.PHONY: build run push clean
IMAGE=docker.io/take0a/maria-htap
CONTAINER=maria01
PASSWORD=password
build: clean
docker build . -t $(IMAGE) --no-cache
run:
docker run --name $(CONTAINER) -dit -e MARIADB_ROOT_PASSWORD=$(PASSWORD) $(IMAGE)
docker exec -it $(CONTAINER) /bin/bash
push:
docker push $(IMAGE)
clean:
docker container rm $(CONTAINER) -f
docker image rm $(IMAGE) -f
こんな感じにしておくと、コマンドを忘れて「あわわ」しなくてすみます。
Docker イメージ
以下で公開しました。
docker pull take0a/maria-htap
で pull できます。
GitHub リポジトリ
以下で公開しました。
他のデータベースのものも公開したら、少しきれいにしておきます。
おわりに
やはり、サンプルデータベースは必要ですよね。
Discussion