DockerでPostgreSQL環境を構築してpgAdminで確認する
ファイル構成
docker-compose-postgres-simple-dev
┣ dockerfiles
┃ ┗ postgres
┃ ┃ ┗ Dockerfile
┣ postgres
┃ ┣ init
┃ ┃ ┗ init.sql
┣ docker-compose.yml
t-shiratori/docker-compose-postgres-simple-dev
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でマウントさせます。
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
データベース初期化用のスクリプトを用意
-- 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を使用します。
こちらからダウンロードします。
クライアントツールを起動してサーバーの設定を追加する
最初起動したときに「Set Master Password」というダイアログが出てきた場合は好きなパスワードを入力して進めます。
起動すると以下のような画面になります。
「Add New Server」というボタンを押すとサーバー設定のダイアログが立ち上がるので、設定を入力します。
まずはDBサーバー名を入力します。
Connectionの設定を入力します。
docker-compose.ymlのenvironmentに書いた内容を入力します。
「Save」ボタン押して接続します。
接続されると以下のような画面になります。
初期化の処理が実行されているのですでにtodoデータベースが作成されています。
テーブルの中身を確認してみます。
todoテーブルを右クリックして「View/Edit Data」→「All Rows」をクリックします。
テーブルの中身が表示されます。
Discussion