サンプルデータ入りのPostgreSQLのコンテナをサクッと立ち上げる

先日、DBのGUIクライアントをいくつか試していました。こういう時はサンプルデータでサクッと試せた方が安心です。

そんなわけで、「サンプルデータが入ったPostgreSQLのDockerコンテナ」の立ち上げ方法を備忘録として残しておきます。

コンテナの内容

サンプルデータにはchinook-databaseを使っています。中身は「アーティスト」「楽曲」などが入っている「デジタルメディアストア」です。
「顧客」「従業員」のようなテーブルもあるので結構 実際の開発をイメージしやすい と思います。

ちなみにchinook-databaseはMySQLなどのサンプルデータもあるようです。

Dockerfile

Dockerfile
FROM postgres:18
ADD https://github.com/lerocha/chinook-database/releases/download/v1.4.5/Chinook_PostgreSql.sql \
/docker-entrypoint-initdb.d/01_chinook.sql
RUN chmod 644 /docker-entrypoint-initdb.d/01_chinook.sql

初期化処理は/docker-entrypoint-initdb.dにsqlファイルを置けば実行してくれます。

参考:PostgreSQL公式イメージのドキュメント

docker-compose.yaml

dockerコマンドで引数をつらつらと書くのは面倒なのでdocker-compose.yamlに設定を書いておきます。

docker-compose.yaml
services:
db:
build: .
image: postgres-sample
container_name: postgres-sample
ports:
- "5432:5432"
environment:
POSTGRES_PASSWORD: test1234
volumes:
- pgdata:/var/lib/postgresql/data
volumes:
pgdata:

ポート番号が被ってたら変えてください。

コンテナ立ち上げ関係のコマンドまとめ

初回のみビルドします。

Terminal window
docker-compose build

開始

使うときにupします。

Terminal window
docker-compose up

停止

実行したdocker-compose upCtrl+cで停止します。

mise.toml

筆者は前述のコマンドをmiseに登録してます。mise run 〇〇をfzfを使って補完を効かせるためです(詳しくは別の記事)。

というわけでmiseの設定ファイルは次のとおり。

mise.toml
[tasks.up]
run = "docker-compose up"
[tasks.build]
run = "docker-compose build"
[tasks.clean-db]
description ="DBの削除。パスワードを変更したときもやる"
run = "docker-compose down -v"

接続先情報

DBクライアントで接続するときの情報は次のとおり。

Host127.0.0.1
Port5432
Databasechinook
Userpostgres
Passwordtest1234

トラブルシューティング

一応書いておきます。

password authentication failed のエラーが出る

パスワードを変更すると次のようなエラーが出るでしょう。

password authentication failed for user "postgres"

いったんボリュームを消して、再度立ち上げればOKです。

Terminal window
docker-compose down -v
docker-compose up

以上、PostgreSQLでサンプルデータをサクッと試す方法でした。