コンテナ・クラウド基盤

Docker Composeとは複数コンテナを1ファイルで管理

Docker Composeとは、複数のコンテナからなるアプリをYAMLファイル1つで定義・起動する仕組みです。基本の書き方、開発・テストでの使いどころ、注意点を整理します。

公的機関・公式資料などの一次情報と照合して作成しています。このサイトについて

Docker Composeとは

Docker Compose とは、複数のコンテナで構成されるアプリケーションを、1つの YAML ファイルで定義し、まとめて起動・停止するための仕組みです。公式ドキュメントでは、複数コンテナのアプリを1つのファイルで定義・管理でき、構成の編成を効率化できると説明しています。

たとえば、Webアプリ、データベース、キャッシュの3つが必要なシステムを、ひとつずつ docker run で起動し、ネットワークや設定を指定していくのは手間がかかります。Compose では、これらを設定ファイル(compose.yaml)に書き、docker compose up という1つのコマンドで立ち上げられます。

基本(仕組み・書き方)

設定ファイルの骨格の例です。

services:
  web:
    build: .
    ports:
      - "8000:8000"
    environment:
      - DATABASE_HOST=db
    depends_on:
      - db
  db:
    image: postgres:16
    volumes:
      - dbdata:/var/lib/postgresql/data
volumes:
  dbdata:

主な項目の意味は次のとおりです。

項目 意味
services 起動するコンテナ(サービス)の一覧
build / image イメージを作る場所、または使うイメージ
ports 外部に公開するポート(外側:内側)
environment 環境変数(設定値)
depends_on 起動の順番の依存
volumes データを残すための保存領域

よく使うコマンドです。

コマンド 意味
docker compose up 定義したコンテナを作成して起動する
docker compose down 作成したコンテナなどを停止して削除する
docker compose ps 動いているサービスを一覧する
docker compose logs ログを表示する

Docker Composeの具体例

公式ドキュメントが挙げる主な用途を、整理して示します。

用途 内容 利点
開発環境 データベースやキャッシュなど依存先を1コマンドで起動 長い環境構築の手順書が不要になる
自動テスト テスト用の環境を作り、終われば破棄 毎回きれいな状態で検証できる
単一ホストでの運用 1台のサーバー上で複数コンテナを動かす 小規模なら管理が単純

Compose ファイルでは変数を使えるため、環境(開発、テスト、本番)ごとに設定値を切り替えることもできます。

たとえば、環境構築の手順が10ステップあり、1回あたり30分かかっていたとします。5人の新メンバーが入る場合、合計で150分です。Compose で1コマンドに置き換えられれば、起動の待ち時間が数分程度になり、人数が増えるほど効果が出ます。仕組みを整える初期費用や、定期的な見直しの工数も加味してください。

Docker Composeの実践ステップ

  1. 動かしたい構成(Web、DB、キャッシュなど)を書き出す。
  2. サービスごとに、使うイメージと必要な設定を決める。
  3. compose.yaml を書き、docker compose up で起動する。
  4. データを残したいサービスには、ボリュームを設定する。
  5. 秘密情報は、ファイルに直接書かず、環境変数や専用の仕組みで渡す。
  6. 手順を README にまとめ、チーム全員が同じ操作で起動できる状態にする。

Docker Composeの注意点

  • depends_on は起動順を制御しますが、相手のサービスが「使える状態」になるのを待つとは限りません。待機が必要なら、ヘルスチェックなどの仕組みを使います。
  • docker compose down で、ボリュームを指定して削除すると、データが消えます。コマンドの付加オプションに注意してください。
  • 設定ファイルにパスワードを書いてバージョン管理に入れると、流出の原因になります。
  • Compose は、単一ホストでの運用を中心に設計されています。多数のサーバーにまたがる運用は、別の仕組みの検討が必要です。
  • 古い書式(version 指定など)は、現在の公式ドキュメントでの扱いが変わっている場合があります。最新の仕様を確認してください。

Docker Composeでよくあるミス

  • ポートの指定を逆にして、つながらない。
  • ボリュームを設定せず、再作成でデータを失う。
  • データベースの起動前にアプリが接続して、エラーになる。
  • 開発用の設定を、そのまま本番に使う。

Docker Composeのチェックリスト

  • 残すべきデータにボリュームを設定したか。
  • 秘密情報をファイルに直書きしていないか。
  • 起動順だけでなく、準備完了の待機を考慮したか。
  • 起動から停止までの手順を、文書にしたか。
  • 利用する書式が最新の公式仕様に合っているか。

Docker ComposeのFAQ(よくある質問)

Q. Docker Compose と Kubernetes は何が違いますか。
A. Compose は主に1台のホスト上の複数コンテナの定義と起動に使い、Kubernetes は多数のサーバーにまたがる大規模な運用管理のための仕組みです。規模と運用要件で選びます。

Q. docker-compose と docker compose の違いは何ですか。
A. 以前の別コマンド(docker-compose)と、現在の docker のサブコマンド(docker compose)という違いがあります。現在は後者が公式の説明で使われています。

Q. 本番で使ってよいですか。
A. 公式ドキュメントでも、単一ホストでの運用用途が示されています。要件に合うかは、可用性や規模で判断します。

筆者の見解(Docker Compose)

Compose の本当の価値は、環境構築の手順を、文章から実行できるファイルに変えることだと考えます。文章の手順書は読み手によって解釈がぶれますが、設定ファイルは同じ結果を返します。私見では、チームで開発しているなら、まず Compose で開発環境を共有し、本番の構成は要件が見えてから別途決めるのが堅実です。

Docker Composeの関連項目

出典(一次情報)

本記事は一般的な情報の提供を目的としています。SaaS・ツールの機能・料金・無料枠・仕様は頻繁に更新されるため、最新の内容は各社の公式ページでご確認ください。契約・法務・セキュリティに関する判断は、専門家や社内の担当部門にご相談ください。「筆者の見解」は一つの考え方です。