Skip to main content

第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してもデータが残る世界💾🔒”**に突入しよう!🚀🐳