Closed6
docker + postgresの備忘録
ひとまずGitHubに残したので、リンク貼っとく
docker初心者のため知らなかったが、docker-composeにおける環境変数をプロジェクトディレクトリに.env
を配置するとそこから環境変数を読んでくれる。
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
のサブディレクトリ
詳細は公式ドキュメントを。
より詳細の設定がしたい時はpostgres.conf
を作っておき、そこに諸々の設定を書いてCOPY
文を使ってコピーしておくと良い。
ここで注意したいのが以下の例の1行目listen_addresses = '*'
の記述は必須なので、忘れずに。
listen_addresses = '*'
timezone = 'UTC'
log_timezone = 'UTC'
search_path = 'USER_DEFINE_SCHEMA, "$user", public'
max_connections = 200
データは永続化しないと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にクローズされました