Day8:Docker Compose入門 中盤
テーマ:Web と DB が“どうやってつながるのか”を理解し、Compose の本当の便利さを体感する
中盤では、前半で学んだ
「Compose は複数コンテナをまとめる設計図」
という感覚をさらに深めていきます。
特に重要なのは、
Web コンテナと DB コンテナがどうやって通信するのか
という部分です。
ここを理解すると、あなたは
「Web + DB の本物のアプリ構成」を Docker で再現できるエンジニア
になります。
Web と DB は“Compose が作る専用ネットワーク”でつながる
Compose は自動でネットワークを作る
docker-compose.yml に複数のサービスを書いた瞬間、
Compose は裏側で 専用ネットワーク を作ります。
このネットワークの中では、
サービス名がそのままホスト名として使える
というのが最大のポイントです。
つまり、Web コンテナから DB コンテナに接続するとき、localhost ではなく db と書きます。
Web から DB への接続例(Node.js)
Node.js の MySQL 接続コード
const mysql = require("mysql2");
const connection = mysql.createConnection({
host: "db", // ← ここが Compose の魔法
user: "root",
password: "password",
database: "myapp"
});
JavaScriptここで host: "db" と書いているのは、
Compose の services に書いた db というサービス名です。
Compose が自動でネットワークを作り、
そのネットワーク内で db という名前のコンテナを見つけてくれる のです。
重要ポイント
- Web と DB は同じネットワークにいる
- サービス名=ホスト名
- IP アドレスを覚える必要はない
- 設定がシンプルでミスが減る
これが Compose の最大のメリットの1つです。
Web と DB の起動順はどうなるのか
Compose は依存関係を理解して動く
Web は DB が起動していないと動かないことが多いです。
Compose では、
depends_on を使って起動順を指定できます。
例:
services:
web:
build: .
depends_on:
- db
YAMLこれで、
「web は db が先に起動してから動く」
という流れになります。
ただし注意
depends_on は「起動順」を保証するだけで、
「DB が完全に準備できたか」は保証しません。
本番ではヘルスチェックを使いますが、
Day8 の段階ではここまで理解できていれば十分です。
Web と DB が“1つのアプリ”として動くイメージ
docker compose up の裏側で起きていること
あなたが次のコマンドを実行すると、
docker compose up
Compose は次のことを自動で行います。
- Web 用の Dockerfile をビルド
- MySQL イメージを取得
- 専用ネットワークを作成
- DB コンテナを起動
- Web コンテナを起動
- Web が DB に接続できるようにする
あなたは 1コマンド しか打っていませんが、
Compose は裏側で 6つ以上の作業 を自動化しています。
これが「複数コンテナ管理」の本質です。
Web と DB のログを個別に確認できる
Web のログを見る
docker compose logs web
DB のログを見る
docker compose logs db
複数コンテナ構成でも、
サービス名を指定するだけでログを見られます。
コンテナ間通信の“つまずきポイント”を深掘りする
よくある間違い:host を localhost にする
初心者が必ずやるミスです。
host: "localhost"
JavaScriptこれは Web コンテナの中の localhost を指すため、
DB にはつながりません。
正しくは:
host: "db"
JavaScriptCompose のサービス名を使うのが正解です。
もう1つのミス:ポート番号の勘違い
DB コンテナの内部ポートは 3306 ですが、
Compose 内の通信ではポート公開は不要です。
つまり、
Web → DB の通信に ports: は不要
ということです。
中盤まとめ
あなたがここまで理解できていれば、中盤はクリアです。
- Compose は Web と DB を同じネットワークに入れる
- サービス名(web / db)がそのままホスト名になる
- Web から DB へは host: “db” で接続する
- depends_on で起動順を制御できる
- docker compose up で複数コンテナが一括起動
- localhost を使うと接続できない(初心者の落とし穴)

