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の実践ステップ
- 動かしたい構成(Web、DB、キャッシュなど)を書き出す。
- サービスごとに、使うイメージと必要な設定を決める。
- compose.yaml を書き、docker compose up で起動する。
- データを残したいサービスには、ボリュームを設定する。
- 秘密情報は、ファイルに直接書かず、環境変数や専用の仕組みで渡す。
- 手順を 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の関連項目
- Docker
- コンテナと仮想マシンの違い
- Docker Hub
- GitHub Actions
- AWS・Azure・Google Cloudの比較
出典(一次情報)
本記事は一般的な情報の提供を目的としています。SaaS・ツールの機能・料金・無料枠・仕様は頻繁に更新されるため、最新の内容は各社の公式ページでご確認ください。契約・法務・セキュリティに関する判断は、専門家や社内の担当部門にご相談ください。「筆者の見解」は一つの考え方です。