Closed6

docker + postgresの備忘録

awonosukeawonosuke

dockerに指定できる環境変数でよく使いそうなのは以下

  • POSTGERS_PASSWORD
    • 必須
    • データベースクラスタのデフォルトスーパーユーザーのパスワード
  • POSTGRES_USER
    • スーパーユーザーのユーザー名
    • デフォルトはpostgres
  • POSTGRES_DB
    • 起動時作成されるデフォルトデータベース
    • デフォルトはPOSTGRES_USERと同名(つまり、省略可能)
  • PGDATA
    • データベースファイルのパス
    • デフォルトは/var/lib/postgresql/data
  • POSTGRES_INITDB_ARGS
    • initdb時のオプション
    • ※エンコーディングの指定とロケールの無効化は明示しておきたい
    • --encoding UTF8 --no-locale
  • POSTGRES_INITDB_WALDIR
    • トランザクションログのパス
    • デフォルトはPGDATAのサブディレクトリ

詳細は公式ドキュメントを。
https://hub.docker.com/_/postgres/

awonosukeawonosuke

より詳細の設定がしたい時はpostgres.confを作っておき、そこに諸々の設定を書いてCOPY文を使ってコピーしておくと良い。
ここで注意したいのが以下の例の1行目listen_addresses = '*'の記述は必須なので、忘れずに。

listen_addresses = '*'

timezone = 'UTC'
log_timezone = 'UTC'

search_path = 'USER_DEFINE_SCHEMA, "$user", public'

max_connections = 200
awonosukeawonosuke

データは永続化しないとDBを使う意味がないのでdockerのvolumeにマウントする。
また、コンテナの/docker-entrypoint-initdb.d配下にスクリプトを置いておくと、コンテナ作成(最初のコンテナ起動)時に自動で実行してくれる。

docker-compose.yml
version: '3'

services:
  postgres:
    image: postgres:14-alpine
    command: -c 'config_file=/etc/postgresql/postgresql.conf'
    ports:
      - 5433:5432
    volumes:
      - db-store:/var/lib/postgresql/data # 永続化
      - ./init-sql:/docker-entrypoint-initdb.d # sqlスクリプト配置
      - ./config/postgresql.conf:/etc/postgresql/postgresql.conf
    environment:
      POSTGRES_USER:
      POSTGRES_PASSWORD:
      POSTGRES_INITDB_ARGS: "--encoding UTF8 --no-locale"

volumes:
  db-store:
このスクラップは2023/03/02にクローズされました