🦭

公式サンプルを公式Dockerイメージに入れる(MariaDB編)

2024/09/02に公開

はじめに

サンプルデータベースが欲しくなったのですが、最近は見かけないような気がします。
昔々は、scott/tiger でつないで EMP テーブルで練習するのがお約束でしたが…。
調べてみることにしました。

最初は、サンプルデータベースの場所だけの備忘録にしようと思ったのですが、ちょっとデータベースを使ったデモとかテストが必要になったので、サンプルデータベース入りの Docker イメージを作って、イメージを作る材料もイメージも公開しようと思います。

MariaDB 編

MySQL には似たような記事がいくつかあります(苦笑)。
基本的には、以前の PostgreSQL の派生形なので、同じです。
https://zenn.dev/robon/articles/6071ebdff6e2f5

公式 Docker イメージ

オフィシャルイメージは、以下にあります。
https://hub.docker.com/_/mariadb/

このイメージをメンテナンスしているのが、以下です。
https://github.com/MariaDB/mariadb-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 に置いておけば良いということです。

公式サンプル

公式サンプルは、以下にありました。
https://mariadb.com/developers/resources/sample-apps/

今回は、MariaDB HTAP Quickstart を組み込むことにします。

Docker イメージを作る

本当は、作らなくても、/docker-entrypoint-initdb.d-v でマウントすれば終了なんだけど、組み込んでしまった方が楽なんじゃないの?ということで作ります。

SQLファイル

MariaDB HTAP Quickstart をダウンロードします。
しかしながら、公式コンテナにない cpimport でデータを投入している ColumnStore の flights.csv は、除外しておきます。

Dockerfile

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

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 イメージ

以下で公開しました。
https://hub.docker.com/r/take0a/maria-htap

docker pull take0a/maria-htap で pull できます。

GitHub リポジトリ

以下で公開しました。
https://github.com/take0a/docker-library/tree/main/mariadb

他のデータベースのものも公開したら、少しきれいにしておきます。

おわりに

やはり、サンプルデータベースは必要ですよね。

GitHubで編集を提案
株式会社ROBONの技術ブログ

Discussion