第06章:Postgresをサービスとして追加する🐘➕
この章は「DBをComposeに“登場人物として追加”して、接続できたら勝ち🏆」まで行きます✨ (次章で“データを消えないようにする💾”=volumeをやるよ!)
1) まず結論:DBは「アプリとは別コンテナ」で動かすのが基本🧱
なぜ分けるの?🤔
- DBは“状態(データ)”を持つので、アプリと寿命が違う🧬
- アプリは何度でも作り直せるけど、DBのデータは守りたい🔒
- 役割分離すると、壊れたときの切り分けが速い⚡
2) 今日のゴール🎯(できたら勝ち!)
✅ Postgresコンテナが起動する
✅ psql で中に入って接続できる
✅ SELECT 1; が通る
✅ 「DBは“サービスとして追加するもの”」が体感できる✨
3) compose.yaml に Postgres サービスを追加する🐘➕
Composeは Compose Specification が推奨で、compose.yaml を中心に進めるのが今の流れです📄✨ (Docker Documentation)
(version: は「いまは不要」扱いになってきて、警告が出ることもあります⚠️)(Qiita)
まずは DBだけ 追加する最小形👇 (この章は“動かす”のが目的なので、細かい最適化は後回しでOK🙆♂️)
## compose.yaml
services:
db:
image: postgres:18.1
environment:
POSTGRES_USER: app
POSTGRES_PASSWORD: app_pw
POSTGRES_DB: appdb
# ports は第9章で「外から繋ぐ」をやるので、ここでは無しでもOK
# ports:
# - "5432:5432"
💡ポイント
POSTGRES_PASSWORDは 空だとダメ(公式イメージの必須条件)です🔑 (Docker Hub)- 2026/02/10 時点では PostgreSQL 18 系が “Current” 扱いで、18.1 が出ています(18は 2025/09/25 リリース)📅 (PostgreSQL)
4) 起動して「DBが生きてる」確認する🧪✨
4-1. DBだけ起動(まずは最小!)🚀
docker compose up -d db
docker compose ps
4-2. ログを見る(起動できてる?👀)
docker compose logs -f db
ログにそれっぽく “ready” が出たらかなり勝ち🎉
(例:database system is ready to accept connections みたいな雰囲気)
5) 接続テスト:psql で中に入る🏁🐘
「ホスト(Windows)に何か入れる」前に、**コンテナ内のpsql**で確認するのが一番ラクです🧠✨
docker compose exec db psql -U app -d appdb
入れたら、まずこれ👇(コピペでOK😆)
SELECT 1;
結果が 1 なら勝ち🏆✨
ちょい遊び(達成感ブースト💥)
CREATE TABLE hello (
id SERIAL PRIMARY KEY,
msg TEXT NOT NULL
);
INSERT INTO hello (msg) VALUES ('Hello Postgres from Compose!');
SELECT * FROM hello;
終わるときは👇
\q
6) さらに確実に:「起動できてる?」をコマンドで判定✅
Postgresには “いま接続できる状態?” を見る pg_isready があります👍
Docker公式の「起動順制御」でも pg_isready を使った例が出ています。(Docker Documentation)
docker compose exec db pg_isready -U app -d appdb
accepting connections 的な結果ならOK🙆♂️✨
7) よくある詰まりポイント🪤(ここだけ押さえれば怖くない)
7-1. ずっと再起動してる/落ちる😵💫
原因の王様:POSTGRES_PASSWORD が空・未設定
👉 公式イメージはパスワード必須です🔑 (Docker Hub)
7-2. psql: FATAL: password authentication failed 🔥
POSTGRES_USER / POSTGRES_PASSWORDの組み合わせを確認- 直したらいったん作り直すのが早いです(※この章は永続化してないので気軽にOK)
docker compose down
docker compose up -d db
8) 次章への伏線:Postgres 18 から「データ保存パス」が変わった⚠️💾
次の第7章で volume(永続化) をやるんだけど、ここ超重要👇
Postgres公式イメージは PostgreSQL 18 以降、PGDATA のデフォルトが バージョン別のパスになって、推奨のマウント先も変わっています。(Docker Hub)
つまり、昔の感覚で ...:/var/lib/postgresql/data とかに貼ると「思ったのと違う!」が起きがち😇
👉 第7章では、この変更に合わせて 2026年の正解パスでvolumeを貼るよ💾✨
9) AI(Copilot / Codex系)を使うと爆速🤖⚡(でも最後は人間がチェック!)
AIに“雛形”を作らせて、あなたがチェックするのが最強です💪😎 たとえば、こんな感じで投げるといいです👇
- 「compose.yaml に postgres:18.1 の db サービスを追加して。POSTGRES_USER/DB/PASSWORD を environment に入れて。ports は無しで。接続確認コマンドも添えて」
チェック観点✅
version:を勝手に入れてない?(最近は不要寄り)(Qiita)POSTGRES_PASSWORDが空になってない?(Docker Hub)- タグが
postgres:latestとかになってない?(学習では固定が安心🍵)
まとめ📌🎉
- Composeに
dbを追加して、docker compose up -d dbで起動🚀 docker compose exec db psql ...で接続できたら勝ち🏆- 次章は「データが消えないDB」に進化させる💾✨(ただし Postgres 18 は保存パス変更があるので注意!)(Docker Hub)
次は第7章「DBの永続化(volume)」で、**“downしてもデータが残る世界💾🔒”**に突入しよう!🚀🐳