第32章:compose.ymlを読む練習(最低限の項目)👀
この章は「書ける」より先に、“読める”を作る回だよ〜😄✨ Compose はチーム開発でも個人開発でも「読める=直せる」なので、ここで一気に慣れちゃおう💪🐳
✅ この章のゴール(できるようになること)🎯
compose.yaml/compose.ymlの 全体の形を見てビビらない😆services / ports / volumesを見て、何が起きる設定か説明できる🗣️✨- 「この compose、外からアクセスできる?」「データ消える?」が判断できる🔍🧠
※ Compose ファイルは compose.yaml が推奨で、互換のために docker-compose.yml 等も読めるよ〜📄(どれが優先されるかも明記あり)(Docker Documentation)
1) まずは“読む順番”を固定しよう 🧭👣
compose を読むときは、毎回この順でOK!✨
- ファイル名とプロジェクト名(あれば
name:)🏷️ - services:サービス一覧(アプリの登場人物)🎭
- 各サービスの ports:外から入れる入口ある?🚪🔌
- 各サービスの volumes:データはどこに保存?消える?💾🧱
- (余裕が出たら)
environmentやdepends_onを軽く見る🎚️⏳
2) YAML 最小講座(ここで詰まる人が多い)🧩😵
YAML は「インデントが命」!🫠
- 半角スペースで揃える(タブは基本使わない)
key: valueは 辞書(マップ)- itemは 配列(リスト)- 文字列は
"..."で囲むと事故が減る(特に ports)🧯
特に ports は 引用符つき文字列が推奨(YAML の解釈事故を避けるため)って公式にも注意があるよ📌(Docker Documentation)
3) Compose の“最小骨格”を目で覚える 👀🦴
Compose は「サービス(containers)」を YAML で束ねる仕組み。 考え方としては services を必ず宣言して、その下にサービス名が並ぶ感じ!(Docker Documentation)
name: todo-api # 省略OK(あってもOK)
services:
api:
# ここに設定が並ぶ
4) services を読む:まずは「登場人物」確認 🎭✨
services は「アプリを構成する部品たち」だよ📦
公式も「services をトップレベルに宣言し、サービス名 → サービス定義の map だよ」って明言してる👍(Docker Documentation)
読みポイント(最低限)👇
api:← これが サービス名(あとで名前解決にも使う)🏷️image:← どのイメージで動く?🍱ports:← 外からアクセスできる?🚪volumes:← データの置き場所は?💾
5) ports を読む:外から入れる“入口”🚪🔌
✅ ports の意味
ports は ホスト(あなたのPC)↔ コンテナのポート対応表だよ📮
公式も「ホストとコンテナのポートマッピング」と説明してる👍(Docker Documentation)
✅ 一番よく見る(短い書き方 / short syntax)
ports:
- "3000:3000"
- 左(ホスト):
3000→ ブラウザでlocalhost:3000にアクセスする側🖥️🌐 - 右(コンテナ):
3000→ コンテナの中で待ち受けてる側🐳 tcp/udpを付けることもできて、デフォはtcp(公式に明記)(Docker Documentation)
✅ ありがち注意⚠️
network_mode: hostとportsは併用しない(実行時エラーになりうる)(Docker Documentation)HOST:CONTAINERは 文字列で書くのが安全(YAML事故回避)(Docker Documentation)
6) volumes を読む:データは“どこに残る?”💾🧱
volumes は「コンテナから見えるファイル置き場をどこにするか」📁
公式では service 側 volumes は、volume / bind / tmpfs / npipe など複数タイプを扱えるよ、と説明されてるよ🧰(Docker Documentation)
✅ 2種類だけ覚えればOK(まずは!)🧠✨
(A) bind mount(ホストのフォルダをそのまま見せる)🪟📂
volumes:
- ./:/app
- 典型:ソースコードを即反映したい開発向け⚡
(B) named volume(Docker管理のデータ置き場)📦💾
volumes:
- api_node_modules:/app/node_modules
volumes:
api_node_modules:
- Docker 側が管理する “名前付き保存領域”
- 複数サービスで再利用したいなら トップレベル
volumes:に定義が基本だよ🧱✨(Docker Documentation) - 「ホストパス直書き」より、壊れにくくて楽な場面が多い👍
7) 読み練習:この compose.yaml を読んでみよう 🧠✍️
次のファイルを見て、質問に答えてみてね😄(まずは読むだけでOK!)
name: todo-api
services:
api:
image: node:24-slim
working_dir: /app
command: sh -c "npm ci && npm run dev"
ports:
- "3000:3000"
volumes:
- ./:/app
- api_node_modules:/app/node_modules
environment:
NODE_ENV: development
volumes:
api_node_modules:
✅ 質問(答えは下にあるよ)👇
- ブラウザでアクセスする URL は?🌐
- 外に公開されてるポート番号は?🔌
- コンテナ内でアプリは何番ポートで待つ想定?🐳
./:/appはどんな意味?📂api_node_modulesはどこに保存されるタイプ?💾
✅ 答え合わせ🎉
http://localhost:300030003000- ホストのプロジェクトフォルダをコンテナの
/appに見せる(bind mount) - named volume(Docker 管理の永続領域)(Docker Documentation)
8) “答え合わせ機械”として最強:docker compose config 🧾✨
読む練習で超便利なのがこれ👇
docker compose config は 変数解決・短縮記法の展開をして「正規化した最終形」を表示してくれるよ!(Docker Documentation)
docker compose config
- 「結局どう解釈されるの?」が一発で見える👀✨
portsやvolumesの短縮がどう展開されるか確認しやすい👍(Docker Documentation)
9) よくある「読めない!」原因トップ7 🪤😵💫(先に潰す)
- インデントずれ(YAMLは容赦ない)🫠
portsの"3000:3000"を数値っぽく書いて事故(文字列推奨)(Docker Documentation)HOST:CONTAINERの左右を逆に覚える😇- bind mount と named volume の見分けがつかない(
./が出たらbind率高め)📂 volumes:が サービス内とトップレベルに両方あって混乱(役割が違う)🧱(Docker Documentation)compose.yamlとdocker-compose.ymlが両方あって「どっち読んでる?」状態(優先がある)(Docker Documentation)version:を書いて警告でビビる(今は obsolete 扱い)⚠️(Docker Documentation)
10) AI活用:コメント付きにして“読める化”する🤖📝
✅ そのまま使えるプロンプト(コピペ用)📎
次の compose.yaml を「初心者でも読める」ように、
各行に短いコメント(# ...)を付けてください。
特に services / ports / volumes の意味を丁寧に。
(コメント以外の内容は変えないで)
---ここから---
(compose.yaml を貼る)
---ここまで---
✅ “読み順テンプレ”を作らせる🧠
この compose.yaml を読むときの「読む順番チェックリスト」を作って。
最初に services、次に ports、次に volumes を重点的に。
✅ ミス探しをやらせる🕵️♂️
この compose.yaml にありがちなバグ/事故ポイントがないかレビューして。
特に ports の書き方、volumes の種類、パス周りを重点チェック。
11) ミニテスト(サクッと10問)📝✨
services:の下に並ぶキー(例:api:)は何?ports: - "8080:80"の左と右はどっちがホスト?portsを文字列で書くのが推奨されがちな理由は?volumes: - ./:/appは何マウント?- named volume を複数サービスで使いたいとき、どこに宣言する?
docker compose configは何をしてくれる?compose.yamlとdocker-compose.ymlが両方あるとき、どっちが優先?version:は今どういう扱い?portsの default protocol は?volumesが「サービス内」と「トップレベル」にあるとき、それぞれ何の役?
※答えはこの章の本文に全部あるよ😄🔎(見つけられたら勝ち🏆)
次章へのつなぎ 🚀
次の第33章で、いよいよ **サービスを2つ(API+DB)**に増やすよ〜!😆🎉 この章で「読める目」ができてると、増えても怖くない👍✨