公式サンプルを公式Dockerイメージに入れる(PostgreSQL編)
はじめに
サンプルデータベースが欲しくなったのですが、最近は見かけないような気がします。
昔々は、scott/tiger でつないで EMP テーブルで練習するのがお約束でしたが…。
調べてみることにしました。
最初は、サンプルデータベースの場所だけの備忘録にしようと思ったのですが、ちょっとデータベースを使ったデモとかテストが必要になったので、サンプルデータベース入りの Docker イメージを作って、イメージを作る材料もイメージも公開しようと思います。
PostgreSQL 編
MySQL には似たような記事がいくつかあります(苦笑)。
なのに、あえて、最初に PostgreSQL をやる理由ですが、元々、PostgreSQL 用の公式イメージで採用された方法が他にもコピーされていたからです。
公式 Docker イメージ
オフィシャルイメージは、以下にあります。
このイメージをメンテナンスしているのが、以下です。
このオフィシャルイメージの 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
に置いておけば良いということです。
公式サンプル
公式サンプルは、以下にありました。
今回は、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
FROM postgres
COPY ./dellstore2-normal-1.0/dellstore2-normal-1.0.sql.gz /docker-entrypoint-initdb.d/01.sql.gz
そのまんまです。
コピー先を 01.sql.gz にしているのは、複数ファイルになって、実行順に制約がある場合に備えてです。
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 イメージ
以下で公開しました。
docker pull take0a/postgres-dellstore2
で pull できます。
GitHub リポジトリ
以下で公開しました。
他のデータベースのものも公開したら、少しきれいにしておきます。
おわりに
やはり、サンプルデータベースは必要ですよね。
Discussion