🐘

DockerでPostgreSQL環境を構築してpgAdminで確認する

2024/03/09に公開

ファイル構成

docker-compose-postgres-simple-dev
 ┣ dockerfiles
 ┃ ┗ postgres
 ┃ ┃ ┗ Dockerfile
 ┣ postgres
 ┃ ┣ init
 ┃ ┃ ┗ init.sql
 ┣ docker-compose.yml

t-shiratori/docker-compose-postgres-simple-dev

Dockerfileを用意

こちらのイメージを使用します。
https://l.pg1x.com/V1TL7YWkiWcsuh3aA

dockerfiles/postgres/Dockerfile
FROM postgres:16-alpine

# Time Zone
ENV TZ Asia/Tokyo

# Language
ENV LANG ja_JP.UTF-8
ENV LANGUAGE ja_JP:ja
ENV LC_ALL ja_JP.UTF-8

docker-compose.ymlを作成

PostgreSQLのDockerイメージは、/docker-entrypoint-initdb.dにスクリプトを置いておくとコンテナ起動時に実行してくれるので、データベースのの初期化処理を書いたファイルをvolumesで/docker-entrypoint-initdb.dにマウントさせます。
postgres - Official Image | Docker Hub

デフォルトではコンテナ内の/var/lib/postgresql/dataにpostgresのデータが保存されますが、ローカルのディレクトリに永続化しておきたいのでこちらもvolumesでマウントさせます。

docker-compose.yml
version: '3'
services:
  postgres:
    container_name: sample-postgres-db
    build: ./dockerfiles/postgres
    restart: always
    ports: 
      - "5432:5432"
    volumes:
      - ./postgres/init:/docker-entrypoint-initdb.d
      - ./db-store:/var/lib/postgresql/data
    environment:
      POSTGRES_USER: postgres_user
      POSTGRES_PASSWORD: postgres_password

データベース初期化用のスクリプトを用意

postgres/init/init.sql
-- DB作成
CREATE DATABASE todo_db;

-- 作成したDBに接続
\c todo_db;

-- テーブル作成
DROP TABLE IF EXISTS todo;
CREATE TABLE todo (
	id integer NOT NULL PRIMARY KEY,
	title varchar(30) NOT NULL,
	content varchar(255),
	created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
);

-- ID用シーケンス作成
CREATE SEQUENCE todo_id_seq START 1;

-- サンブルデータの登録
INSERT INTO todo (id, title) VALUES(nextval('todo_id_seq'), 'todo1');

コンテナを起動する

docker-compose-postgres-simple-dev $ docker compose up

クライアントツールで確認する

pgAdminを使用します。
こちらからダウンロードします。
https://www.pgadmin.org/download/

クライアントツールを起動してサーバーの設定を追加する

最初起動したときに「Set Master Password」というダイアログが出てきた場合は好きなパスワードを入力して進めます。

起動すると以下のような画面になります。

「Add New Server」というボタンを押すとサーバー設定のダイアログが立ち上がるので、設定を入力します。
まずはDBサーバー名を入力します。

Connectionの設定を入力します。
docker-compose.ymlのenvironmentに書いた内容を入力します。
「Save」ボタン押して接続します。

接続されると以下のような画面になります。

初期化の処理が実行されているのですでにtodoデータベースが作成されています。

テーブルの中身を確認してみます。
todoテーブルを右クリックして「View/Edit Data」→「All Rows」をクリックします。

テーブルの中身が表示されます。

Discussion