最近PostgreSQLを触ることが多いため、サクッと遊べるようにDockerで作成してみた。

Dockerfile
FROM postgres:14.5-bullseye
RUN localedef -i ja_JP -c -f UTF-8 -A /usr/share/locale/locale.alias ja_JP.UTF-8
ENV LANG ja_JP.UTF-8
docker-compose.yml
version: '3'
services:
  db:
    build: ./
    # image: postgres:14.5-bullseye
    ports:
      - 5432:5432
    volumes:
      - "${PWD}/docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d"
    environment:
      POSTGRES_PASSWORD: postgres

初期構築スクリプト

/docker-entrypoint-initdb.d に構築用DDLを配置すると起動時に勝手に読み込んで実行してくれる。

docker-entrypoint-initdb.dディレクトリを/docker-entrypoint-initdb.dにバインドすることで、docker-compose up 実行時にDDLが実行される。

ディレクトリ構成
./
├── Dockerfile
├── docker-compose.yml
└── docker-entrypoint-initdb.d
    ├── 01.create-db.sql
    ├── 02.create-role.sql
    └── 03.create-schema.sql
Note
docker-entrypoint-initdb.dの下にddlというディレクトリを作成し配置してみたが実行されなかった。 1階層目だけ有効らしい。