
「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サーバとかになる気がしますが、
順番にコンテナの調整内容を確認し、使える情報を残していこうと思います!