DockerでPostgreSQLを起動する方法

はじめに

こんにちは、新卒2年目の岡崎です。今回は、DockerでPostgreSQLを起動する方法を紹介します。

環境

$  docker version

Client:
 Cloud integration: v1.0.31
 Version:           23.0.5
 API version:       1.42
 Built:             Wed Apr 26 16:12:52 2023
 OS/Arch:           darwin/arm64
 Context:           default

Server: Docker Desktop 4.19.0 (106363)
 Engine:
  Version:          23.0.5
  API version:      1.42 (minimum version 1.12)
  Built:            Wed Apr 26 16:17:14 2023
  OS/Arch:          linux/arm64
  Experimental:     false
 containerd:
  Version:          1.6.20
  GitCommit:      × × × × × × × × × × ×
 runc:
  Version:          1.1.5
  GitCommit:        v1.1.5-0-gf19387a
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

ディレクトリ構成

.
|-- docker-compose-postgres.yml
`-- postgres
``-- postgres-init
``|-- init.sql

ファイルごとの実装例を示します。

docker-compose-postgres.yml

name: "demo"
services:
  postgres:
    image: postgres:15.4
    container_name: demo-postgres
    environment:
      POSTGRES_PASSWORD: local_root_password
      POSTGRES_HOST_AUTH_METHOD: scram-sha-256
      POSTGRES_INITDB_ARGS: "--auth-host=scram-sha-256"
      TZ: Asia/Tokyo
    ports:
      - "5433:5432"
    volumes:
      - "./postgres/postgres-init:/docker-entrypoint-initdb.d"
      - "./postgres/data:/var/lib/postgresql/data"

name

コンテナの名前を定義します。

service

起動するサービス群を定義します。今回の場合は、PostgreSQLを起動するための設定を定義しています。

image

イメージ名を定義します。

container_name

コンテナ名を定義します。

environment

環境変数名を定義します。

今回はPOSTGRES_PASSWORD(PostgreSQLのパスワード)、POSTGRES_HOST_AUTH_METHOD(PostgreSQLの認証方法)、POSTGRES_INITDB_ARGS(PostgreSQLロケール)、TZ(タイムゾーン)を設定しています。

ports

ポートを定義します。

volumes

名前付きボリュームをコンテナ上のフォルダに割り当てます。フォーマットは以下の通りです。

ボリューム名:コンテナの絶対パス

今回の場合、/docker-entrypoint-initdb.dを、コンテナ上の./postgres/postgres-initに割り当てています。(./postgres/data:/var/lib/postgresql/dataも同様です。)

init.sql

CREATE ROLE demo_user WITH LOGIN PASSWORD 'demo_password';
CREATE DATABASE demo OWNER demo_user ENCODING 'UTF8' LOCALE 'C' TEMPLATE template0;

初期設定として、ロール・データベースの作成の作成を行っています。

コマンド

$ docker-compose -f docker-compose-postgres.yml up

実際にこのような起動画面になったら準備完了です。

今回は、TablePlusというGUIツールを使って接続できるか確認しました。

tableplus.com

Port、User、Password、Databaseを指定します。

無事に接続することができました。

最後に

今回は、DockerでPostgreSQLを起動する方法を紹介しました。

最後に、エキサイトではデザイナー、フロントエンジニア、バックエンドエンジニア、アプリエンジニアを絶賛募集しております!

興味があればぜひぜひ連絡ください!

www.wantedly.com