コンテナ

Docker Compose どっかーこんぽーず

DockerコンテナマルチコンテナYAMLオーケストレーションdocker-compose.yml
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)を同時に起動し、webdbが起動してから立ち上がる」という構成を宣言しています。

よく使うコマンド一覧

コマンド動作
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 vs Kubernetes Docker Compose 🎯 用途:開発・テスト環境 📦 規模:数コンテナ〜十数コンテナ 🖥 動作:1台のマシン上 📝 設定:YAMLで簡単に書ける 🚀 習得:数時間〜1日 Kubernetes(k8s) 🎯 用途:本番環境・大規模運用 📦 規模:数百〜数千コンテナ 🖥 動作:複数サーバーをまたぐ 📝 設定:複雑な設定ファイル群 🚀 習得:数週間〜数ヶ月 まず Compose で慣れてから k8s へ、が王道の学習ルート

実務での使い分け:

  • Docker Compose → 開発者がローカルで動かす環境、CIでのテスト実行、小規模な社内ツール
  • Kubernetes → 大規模サービスの本番運用、自動スケーリングが必要な場合

発注・選定の判断基準として、「まずはDocker Composeで開発環境を統一できているか?」が最初のステップです。Kubernetesはその次の話です。


関連する規格・RFC

規格・仕様内容
Compose SpecificationDocker Composeのファイル形式を定めたオープン仕様。Docker社単独ではなくコミュニティ管理
OCI(Open Container Initiative)コンテナイメージとランタイムの標準仕様。Docker Composeが扱うコンテナの土台
YAML 1.2docker-compose.ymlの記述形式として使われるデータシリアライズ言語の仕様

関連用語

  • Docker — コンテナを作成・実行するプラットフォーム本体。Composeはその上位ツール
  • コンテナ — アプリとその実行環境を丸ごとパッケージ化した仕組み
  • Kubernetes — 大規模な本番環境でコンテナを管理・自動化するオーケストレーションツール
  • YAMLdocker-compose.ymlの記述に使われる設定ファイル形式
  • マイクロサービス — アプリを小さなサービスに分割する設計手法。Composeと相性が良い
  • Dockerfile — コンテナイメージのビルド手順を記述するファイル。Composeと組み合わせて使う