Docker Composeとは?何が嬉しいのか・どんな場面で使うか完全解説
第5章までで、docker run にオプションを山ほど付けてコンテナを立ち上げる技を身につけました。が、実務ではこうなります:
docker network create app-net
docker volume create pgdata
docker run -d --name db --network app-net -v pgdata:/var/lib/postgresql/data \
-e POSTGRES_PASSWORD=secret postgres:16
docker run -d --name redis --network app-net redis:7-alpine
docker run -d --name api --network app-net -p 3000:3000 \
-e DATABASE_URL=postgres://postgres:secret@db:5432/postgres \
-e REDIS_URL=redis://redis:6379 \
myapp:v1
起動するたびに毎回この長文を叩く、メンバー全員が同じ手順を正確になぞる、バージョン変更するとすべて書き直す——現実的ではありません。
Docker Compose はこれを1つのYAMLファイルに書き、docker compose up だけで全部起動する仕組み。本章からはこの Compose を主軸に据えて、複数コンテナの世界を扱います。
💡 この記事のゴール
① Compose の位置づけと「何が嬉しいのか」を把握
② V1 (docker-compose) と V2 (docker compose) の違いを理解
③ Compose が向くユースケース/向かないユースケースを知る
④ 最小の
① Compose の位置づけと「何が嬉しいのか」を把握
② V1 (docker-compose) と V2 (docker compose) の違いを理解
③ Compose が向くユースケース/向かないユースケースを知る
④ 最小の
compose.yml で動かすまでの流れ
目次
- Docker Compose とは
- なぜ嬉しいのか(docker run との対比)
- V1(docker-compose)と V2(docker compose)
- 向く場面・向かない場面
- 最小の動作例
- まとめ
1. Docker Compose とは
Docker Compose は、複数のコンテナを宣言的に定義し、一括で起動・停止・管理する公式ツールです。設定は compose.yml(または docker-compose.yml)1ファイルに集約されます。
【Compose で何が起きるか】
📄 compose.yml
services:
web: …
db: …
web: …
db: …
━▶
compose up
compose up
🚀 一括起動
📦 web コンテナ
📦 db コンテナ
🗄️ pgdata ボリューム
🌐 カスタムネットワーク
📦 db コンテナ
🗄️ pgdata ボリューム
🌐 カスタムネットワーク
背後でやっていることは第5章までに学んだ内容(network create・volume create・docker run)そのもの。Compose はそれらを自動化する指揮者です。
2. なぜ嬉しいのか(docker run との対比)
| 観点 | 素の docker run |
Docker Compose |
|---|---|---|
| 起動 | 5行のコマンドを順番に叩く | docker compose up 1発 |
| 停止・掃除 | stop → rm → network rm を1つずつ | docker compose down 1発 |
| 再現性 | 手順書に書いて祈る | YAMLをGitに入れればチーム全員同一 |
| ネットワーク | 自分で network create+--network |
自動でプロジェクト専用のカスタムブリッジ |
| ボリューム | 自分で volume create+-v |
YAMLに書けば自動作成 |
| 依存関係 | アプリ側でリトライ | depends_on + healthcheck で制御 |
| 環境変数 | -e を羅列 |
.env や environment: で整理 |
| 差分変更 | 全部止めて手順やり直し | YAML編集 → up で差分のみ反映 |
💡 Compose はオーケストレーションではない
「複数コンテナを扱う」という意味では Swarm や Kubernetes と似ていますが、Compose は単一ホスト上の定義ツールです。スケールアウトや可用性管理は本分ではありません。本番の分散運用は第10章・第11章で扱います。
「複数コンテナを扱う」という意味では Swarm や Kubernetes と似ていますが、Compose は単一ホスト上の定義ツールです。スケールアウトや可用性管理は本分ではありません。本番の分散運用は第10章・第11章で扱います。
3. V1(docker-compose)と V2(docker compose)
Compose にはバージョンが2系統あります。現在はV2(docker compose、スペース)が公式推奨。旧V1(docker-compose、ハイフン)は2023年7月で End of Life、現在は保守もされていません。
| V1(旧) | V2(現行) | |
|---|---|---|
| コマンド | docker-compose |
docker compose(スペース) |
| 実装 | Python 製の別バイナリ | Goで書かれた Docker CLI プラグイン |
| インストール | 別途 pip / 手動 | Docker Desktop・Docker Engine 同梱 |
| YAML 仕様 | version: “3.x” 必須 | version: 不要(最新仕様扱い) |
| 速度 | 起動やや遅い | 速い |
| 状態 | EOL(使わない) | 積極開発中 |
⚠️ ネットの古い記事に注意
docker-compose up(ハイフン)で書かれた情報は古い可能性があります。本章では全部V2(docker compose、スペース)で進めます。詳しい違いはコラム記事「docker compose と docker-compose の違い」で扱っていますので、そちらも参照ください。
4. 向く場面・向かない場面
✅ 向く場面
| ケース | 理由 |
|---|---|
| チーム開発の共有環境 | YAMLをGitで共有するだけで全員が同一構成で立ち上がる |
| マイクロサービスのローカル動作確認 | api + db + redis + queue を一発で起動 |
| CI/CD のテスト環境 | GitHub Actions などで compose up してテスト実行 |
| デモ・研修・勉強会 | コンテナ習熟度に関わらず全員が同じ環境を用意できる |
| 小〜中規模の本番(単一ホスト) | Swarm/K8s 過剰なシステムは Compose で十分 |
❌ 向かない場面
| ケース | 推奨 |
|---|---|
| 複数ホストに分散する本番 | Docker Swarm(第10章)or Kubernetes(第11章) |
| 自動スケール・ローリングアップデート | 同上 |
| 大量の似たコンテナを動的に並べる | Kubernetes |
| 超大規模(数百ノード)の運用 | Kubernetes + マネージド |
5. 最小の動作例
3分で試せる最小例:nginx + Redis を立ち上げるだけ。
5-1. compose.yml を作る
# compose.yml
services:
web:
image: nginx
ports:
- "8080:80"
cache:
image: redis:7-alpine
5-2. 起動
$ docker compose up -d
[+] Running 3/3
✔ Network myapp_default Created
✔ Container myapp-cache-1 Started
✔ Container myapp-web-1 Started
3つのリソース(ネットワーク + 2つのコンテナ)が自動で作られます。ブラウザで http://localhost:8080 を開くと nginx の Welcome ページが表示されるはずです。
5-3. 一覧と停止
# 起動中のサービス一覧
$ docker compose ps
NAME IMAGE STATUS
myapp-cache-1 redis:7-alpine Up 1 minute
myapp-web-1 nginx Up 1 minute (ports 0.0.0.0:8080->80/tcp)
# 全部止めて後片付け
$ docker compose down
[+] Running 3/3
✔ Container myapp-web-1 Removed
✔ Container myapp-cache-1 Removed
✔ Network myapp_default Removed
✅ 体感できたこと
・ネットワーク(
・サービス名(
・内部では
・ネットワーク(
myapp_default)が自動作成され、自動削除される・サービス名(
web, cache)が自動でコンテナ名の一部になる(デフォルト: <プロジェクト>-<サービス>-<番号>)・内部では
web から cache へ名前解決で通信できる(5-2 の仕組みがそのまま)
6. まとめ
| 押さえどころ | 内容 |
|---|---|
| 位置づけ | 複数コンテナを宣言的に管理する Docker 公式ツール |
| コマンド | V2 の docker compose(スペース)を使う |
| ファイル | compose.yml(または docker-compose.yml) |
| 得意 | 開発・CI・単一ホスト本番・研修 |
| 不得意 | 分散本番・自動スケール(Swarm/K8sの領域) |
| 内部 | 第5章まで学んだ機能をYAMLから呼び出しているだけ |
✅ 次のステップ
6-2 compose.yml 完全ガイドで、YAML の構造(services / networks / volumes / configs / secrets)と主要な書き方を一気に整理します。
6-2 compose.yml 完全ガイドで、YAML の構造(services / networks / volumes / configs / secrets)と主要な書き方を一気に整理します。
参考リンク
- Docker Compose overview(公式) — Compose 全体像の一次情報源。
- Migrate to Compose V2(公式) — V1 からの移行ガイド。



コメント