Docker Compose どっかーこんぽーず
簡単に言うとこんな感じ!
複数のコンテナ(アプリ・データベース・キャッシュなど)をまとめて一発で起動・管理できる「指揮者」ツールだよ!「全員よーいドン!」って1コマンドで全部動かせるんだ。
Docker Composeとは
Docker Composeとは、複数のDockerコンテナをまとめて定義し、一括で起動・停止・管理するためのツールです。通常、Webアプリケーションはアプリ本体・データベース・キャッシュサーバーなど複数のコンポーネントで構成されますが、それぞれを個別に起動・設定するのは手間がかかります。Docker Composeを使うと、docker-compose.ymlという1つの設定ファイルに全コンテナの構成をまとめて書き、docker compose upという1コマンドで全員同時に起動できます。
開発現場では「ローカル環境を本番に近い構成で素早く再現する」ために広く使われています。チームメンバー全員が同じdocker-compose.ymlを使うことで、「自分のPCでは動くのに他の人の環境では動かない」という問題(いわゆる“Works on my machine”問題)を大幅に減らせるのが最大の利点です。
もともとはサードパーティ製のdocker-compose(v1)として提供されていましたが、現在はDocker本体に統合され、**docker compose(スペース区切り、v2以降)**として標準コマンドになっています。
Docker Composeの構造と仕組み
Docker Composeの中心はdocker-compose.yml(またはcompose.yml)というYAML形式の設定ファイルです。このファイルに「どんなコンテナを・どんな設定で・どうつなぐか」を宣言的に書きます。
設定ファイルの主要な構成要素
| セクション | 役割 | 代表的な設定項目 |
|---|---|---|
services | 起動するコンテナの定義 | image, build, ports, environment, volumes, depends_on |
networks | コンテナ間のネットワーク定義 | driver(bridge/host等) |
volumes | データの永続化領域の定義 | driver, external |
典型的なdocker-compose.ymlの例
services:
web:
build: .
ports:
- "8080:80"
depends_on:
- db
db:
image: postgres:15
environment:
POSTGRES_PASSWORD: secret
volumes:
- db-data:/var/lib/postgresql/data
volumes:
db-data:
この例では「web(アプリ)とdb(PostgreSQL)を同時に起動し、webはdbが起動してから立ち上がる」という構成を宣言しています。
よく使うコマンド一覧
| コマンド | 動作 |
|---|---|
docker compose up | 全サービスを起動(-dでバックグラウンド実行) |
docker compose down | 全サービスを停止・削除 |
docker compose ps | 起動中のサービス一覧を表示 |
docker compose logs | ログを表示(-fでリアルタイム追跡) |
docker compose build | イメージをビルド |
docker compose exec | 実行中コンテナでコマンドを実行 |
覚え方:「設計図1枚で全員集合」
docker-compose.yml = 弁当の注文書。「ご飯・おかず・汁物、全部いっぺんに作って!」と厨房(Docker)に伝えるイメージ。個別に注文しなくていいから楽ちん!
歴史と背景
- 2013年 — Docker本体がリリース。当初はコンテナを1つずつ手動で起動する運用が主流だった
- 2014年 — Fig(フィグ)というサードパーティ製ツールが登場。複数コンテナの定義ファイルをYAMLで書けるようになった
- 2015年 — Docker社がFigを買収・引き継ぎ、Docker Compose(v1)として正式リリース。コマンドは
docker-compose(ハイフン区切り) - 2016〜2020年 — マイクロサービスの普及とともにDocker Composeの利用が爆発的に広まる。開発環境のデファクトスタンダードに
- 2021年 — Compose仕様がオープンな仕様として公開。Docker以外の実装も可能に
- 2022年 — Docker Compose v2がリリース。Dockerプラグインとして統合され、コマンドが
docker compose(スペース区切り)に変更 - 現在 — v1(
docker-compose)は非推奨。v2(docker compose)が標準。開発環境だけでなく小規模な本番環境でも使われるケースが増加
Docker ComposeとKubernetesの違い
Docker Composeと混同しやすいのがKubernetes(クーバネティス)です。どちらも「複数のコンテナをまとめて管理する」ツールですが、対象規模と複雑さが大きく異なります。
実務での使い分け:
- Docker Compose → 開発者がローカルで動かす環境、CIでのテスト実行、小規模な社内ツール
- Kubernetes → 大規模サービスの本番運用、自動スケーリングが必要な場合
発注・選定の判断基準として、「まずはDocker Composeで開発環境を統一できているか?」が最初のステップです。Kubernetesはその次の話です。
関連する規格・RFC
| 規格・仕様 | 内容 |
|---|---|
| Compose Specification | Docker Composeのファイル形式を定めたオープン仕様。Docker社単独ではなくコミュニティ管理 |
| OCI(Open Container Initiative) | コンテナイメージとランタイムの標準仕様。Docker Composeが扱うコンテナの土台 |
| YAML 1.2 | docker-compose.ymlの記述形式として使われるデータシリアライズ言語の仕様 |
関連用語
- Docker — コンテナを作成・実行するプラットフォーム本体。Composeはその上位ツール
- コンテナ — アプリとその実行環境を丸ごとパッケージ化した仕組み
- Kubernetes — 大規模な本番環境でコンテナを管理・自動化するオーケストレーションツール
- YAML —
docker-compose.ymlの記述に使われる設定ファイル形式 - マイクロサービス — アプリを小さなサービスに分割する設計手法。Composeと相性が良い
- Dockerfile — コンテナイメージのビルド手順を記述するファイル。Composeと組み合わせて使う