PostgreSQL の使用方法

起動方法(コンテナ)

  • Docker デーモン(DockerDesktop)を立ち上げる。

  • docker-compose.yml ファイルを作成して、下記コマンド実行。

docker-compose up -d
  • 「-d」は、バックグラウンド実行のオプション

docker-compose.yml

  • ブラウザでの確認のための pgweb の立ち上げも同時に行っている。

version: '3.8'

services:
# PostgreSQL立ち上げ
  db:
    image: postgres:14-alpine
    # コンテナが落ちた際の自動再起動の設定
    restart: always
    environment:
      TZ: ${TIME_ZONE} # コンテナ自体のタイムゾーンの設定(デフォルトはUTCなので9時間ずれ)
      PGTZ: ${TIME_ZONE} # ポスグレのタイムゾーン設定
      POSTGRES_USER: ${POSTGRES_USER}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
      POSTGRES_DB: ${POSTGRES_DB}
    ports:
      - "5432:5432"
    volumes:
        # コンテナ停止してもdataを残したいなら必須の設定
        # ローカルの隠しフォルダにデータがマウントされる
        # データ削除の為には、docker volume pruneなど必要
      # - postgres_data:/var/lib/postgresql/data
        # 右辺の位置にsqlを置くと、起動時に自動実行されるため、initにsqlを置いてマウントしている
      - ./init:/docker-entrypoint-initdb.d
    # デフォルト設定では、同じcompose-file内のサービスは同じネットワークに入るので、ローカル開発では基本不要な設定
    # networks:
    #   - app_network

# DBをhtmlで確認するためのpgweb立ち上げ
# 現状、initの事前実行でdb起動が遅れるためか、初回はpgwebが起動失敗で落ちる
  pgweb:
    image: sosedoff/pgweb
    container_name: "pgweb"
    ports:
      - "8081:8081"
    environment:
      # 自動でログインするための変数設定。これがないと起動のたびにDBのURLを利用したログインが必要
      # フォーマットはpostgres://ユーザ名:パスワード@DBサービス名:5432/DB名?sslmode=disable
      PGWEB_DATABASE_URL: postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@db:5432/${POSTGRES_DB}?sslmode=disable
    depends_on:
      - db
    # networks:
      # - app_network

# volumes:
#   postgres_data:

.env

以下は一例

TIME_ZONE=Asia/Tokyo
POSTGRES_USER=myuser
POSTGRES_PASSWORD=mypassword
POSTGRES_DB=mydb