🐘

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

2024/08/19に公開

はじめに

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

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

PostgreSQL 編

MySQL には似たような記事がいくつかあります(苦笑)。
なのに、あえて、最初に PostgreSQL をやる理由ですが、元々、PostgreSQL 用の公式イメージで採用された方法が他にもコピーされていたからです。

公式 Docker イメージ

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

このイメージをメンテナンスしているのが、以下です。
https://github.com/docker-library/postgres

このオフィシャルイメージの Initialization scripts に書かれています。

If you would like to do additional initialization in an image derived from this one, add one or more *.sql, *.sql.gz, or *.sh scripts under /docker-entrypoint-initdb.d (creating the directory if necessary). After the entrypoint calls initdb to create the default postgres user and database, it will run any *.sql files, run any executable *.sh scripts, and source any non-executable *.sh scripts found in that directory to do further initialization before starting the service.

なので、.sql.sh/docker-entrypoint-initdb.d に置いておけば良いということです。

公式サンプル

公式サンプルは、以下にありました。
https://www.postgresql.org/ftp/projects/pgFoundry/dbsamples/

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

Docker イメージを作る

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

SQLファイル

dellstore2-normal-1.0.tar.gz を解凍して、dellstore2-normal-1.0.sql を使います。
Docker イメージの大きさの問題もあるので、build する際は、dellstore2-normal-1.0.sql.gz に圧縮します。

Dockerfile

Dockerfile
FROM postgres
COPY ./dellstore2-normal-1.0/dellstore2-normal-1.0.sql.gz /docker-entrypoint-initdb.d/01.sql.gz

そのまんまです。
コピー先を 01.sql.gz にしているのは、複数ファイルになって、実行順に制約がある場合に備えてです。

Makefile

Makefile
.PHONY: build run push clean

IMAGE=docker.io/take0a/postgres-dellstore2
CONTAINER=postgres01
PASSWORD=password

build: clean
	gzip -k dellstore2-normal-1.0/*.sql 
	docker build . -t $(IMAGE) --no-cache

run:
	docker run --name $(CONTAINER) -dit -e POSTGRES_PASSWORD=$(PASSWORD) $(IMAGE)
	docker exec -it $(CONTAINER) /bin/bash

push:
	docker push $(IMAGE)

clean:
	docker container rm $(CONTAINER) -f
	docker image rm $(IMAGE) -f
	rm -f dellstore2-normal-1.0/*.sql.gz

こんな感じにしておくと、コマンドを忘れて「あわわ」しなくてすみます。

Docker イメージ

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

docker pull take0a/postgres-dellstore2 で pull できます。

GitHub リポジトリ

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

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

おわりに

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

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

Discussion