”今”から始めるdocker入門 PostgreSQLサーバーをdockerコンテナでッ!

dockerコンテナで簡単に環境を用意することはできた、、、
コンテナ構築の手順もなんとなくわかった、、、

ではッ!

実際にどう使いだせばいいのか、というところを深堀りしていこうと思います。

とりあえず「DBサーバのコンテナを作るなら、初期設定も自動でさせたいよね?」
と思い、PostgreSQLのコンテナイメージを用いて記載していきます!

スポンサーリンク

やりたいこと

コンテナ作成時に下記ができるようにしていきます!

  • postgresql.confのパラメータを変更する
  • テーブル、データなどを流し込む

PostgreSQLサーバーをコンテナで簡単に作成することはできた、、、

構成について

ディレクトリ構成

[コンテナディレクトリ]/
└── docker-compose.yml
└── initdb
    └── init.sql

docker-compose.ymlの中身

services:
  db:
    image: postgres:latest
    container_name: postgres-container

    # 自動起動・再起動
    restart: always

    # 接続情報
    environment:
      POSTGRES_USER: testuser
      POSTGRES_PASSWORD: test
      POSTGRES_DB: pref

    ports:
      - "5432:5432"  # ホストの5432 → コンテナの5432

    networks:
      - postgres_network

    # データの初期化(SQLファイル実行)
    volumes:
      - ./initdb:/docker-entrypoint-initdb.d

    command:
    - "postgres"
    - "-c"
    - "log_min_duration_statement=0"


networks:
  postgres_network:

※postgresql.confの設定値をcommandの記述によって変更します
 postgresql.confのファイルを直接編集せず、起動時に都度パラメータを書き換えます

init.sqlの中身

CREATE TABLE prefectures(
	 prefectures_id varchar(2) PRIMARY KEY
	,prefectures_name varchar(50)
	,regist_date timestamp DEFAULT now()
	,update_date timestamp DEFAULT now()
	,del_flg smallint DEFAULT 0
);

CREATE TABLE municipalities(
	 prefectures_id varchar(2)
	,municipalities_id varchar(4)
	,municipalities_name varchar(50)
	,regist_date timestamp DEFAULT now()
	,update_date timestamp DEFAULT now()
	,del_flg smallint DEFAULT 0
	,FOREIGN KEY(prefectures_id) REFERENCES prefectures(prefectures_id)
	,PRIMARY KEY(prefectures_id,municipalities_id)
);

--都道府県
INSERT INTO prefectures(prefectures_id,prefectures_name) VALUES('01','北海道');
...

--市区町村
INSERT INTO municipalities(prefectures_id,municipalities_id,municipalities_name) VALUES('01','1002','札幌市');
...

※都道府県、市区町村テーブルを作成し、データをINSERT
※PostgreSQLコンテナはsql拡張子を持つファイルは自動的に実行する

何でsql拡張子のファイルを実行する?

「/usr/local/bin/docker-entrypoint.sh」というファイルでsql拡張子のファイルを読み込むようになっているようで、個々の記述に従って実行されてます。

※含まれていないコンテナもあるため、必ず実行されない
 実行する場合、同じようにshファイルを置けばOK

構成と検証

イメージの作成

cd [docker-compose.ymlを作成したディレクトリ]

docker compose up -d

動作の検証

#コンテナにターミナル移動
docker exec -it postgres-container bash

#PostgreSQLにログイン
psql -U testuser pref

#適当にSQL実行
select * from prefectures;
 prefectures_id | prefectures_name |        regist_date         |        update_date         | del_flg
----------------+------------------+----------------------------+----------------------------+---------
 01             | 北海道           | 2025-06-14 07:34:14.283395 | 2025-06-14 07:34:14.283395 |       0
 02             | 青森県           | 2025-06-14 07:34:14.325338 | 2025-06-14 07:34:14.325338 |       0
 03             | 岩手県           | 2025-06-14 07:34:14.367711 | 2025-06-14 07:34:14.367711 |       0
...

トラブルシューティング

docker compose up -dしてエラーが出ないのにコンテナが起動しない(落ちる)

docker composeによるコンテナ作成までは成功したけど、
コンテナの初期設定にエラーがあった場合に起こります。

その場合はコンテナのログを確認して、エラーを解消すれば落ちなくなるはず。

まとめ

これでDBコンテナ周りを使い、手軽にDBの初期設定ができるはず!
一応dockerの初歩的な使い方は今までの記事作成の過程で学んできたものの、
実践的な使い方には至っていなかったため、今回の内容をまとめた次第です。

Web周りの仕事をしている関係上、他にあるとしたらWebサーバとかになる気がしますが、
順番にコンテナの調整内容を確認し、使える情報を残していこうと思います!

スポンサーリンク
おすすめの記事