6.1 Docker Composeとは?何が嬉しいのか・どんな場面で使うか完全解説

Docker Compose

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.yml で動かすまでの流れ

目次

  1. Docker Compose とは
  2. なぜ嬉しいのか(docker run との対比)
  3. V1(docker-compose)と V2(docker compose)
  4. 向く場面・向かない場面
  5. 最小の動作例
  6. まとめ

1. Docker Compose とは

Docker Compose は、複数のコンテナを宣言的に定義し、一括で起動・停止・管理する公式ツールです。設定は compose.yml(または docker-compose.yml)1ファイルに集約されます。

【Compose で何が起きるか】
📄 compose.yml
services:
  web: …
  db: …

━▶
compose up
🚀 一括起動
📦 web コンテナ
📦 db コンテナ
🗄️ pgdata ボリューム
🌐 カスタムネットワーク

背後でやっていることは第5章までに学んだ内容(network createvolume createdocker 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 を羅列 .envenvironment: で整理
差分変更 全部止めて手順やり直し YAML編集 → up で差分のみ反映
💡 Compose はオーケストレーションではない
「複数コンテナを扱う」という意味では 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 ページが表示されるはずです。



🔒 http://localhost:8080

Welcome to nginx!

If you see this page, the nginx web server is successfully installed and working.

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)と主要な書き方を一気に整理します。

参考リンク


Dockerの基礎を動画で体系的に学びませんか?

実務で使う基礎だけを3時間に凝縮。環境構築から丁寧に解説しています。

Udemy Docker入門講座 クーポン割引で講座を見る →

コメント

タイトルとURLをコピーしました