Docker Compose の概要

読む時間の目安: 2 分

Compose ファイルリファレンスをお探しですか?

その場合は最新版がこちら

Compose とは、複数のコンテナーを定義し実行する Docker アプリケーションのためのツールです。 Compose においては YAML ファイルを使ってアプリケーションサービスの設定を行います。 コマンドを 1 つ実行するだけで、設定内容に基づいたアプリケーションサービスの生成、起動を行います。 Compose の機能に関する詳細は、機能一覧 を参照してください。

Compose は本番環境、ステージング環境、開発環境において動作し、CI ワークフローとしても利用することができます。 それぞれの使い方については、一般的な利用例を確認してください。

Compose を使うには、基本的に 3 つのステップを踏みます。

  1. アプリケーション環境をDockerfileに定義します。 これによりその環境は再構築が可能となります。

  2. アプリケーションを構成するサービスをdocker-compose.ymlファイル内に定義します。 各サービスは独立した環境において起動することになります。

  3. docker-compose upを実行し Docker compose コマンド を起動します。 そしてアプリケーション全体を実行します。 docker-compose の実行バイナリを使ってdocker-compose upを実行する方法もあります。

docker-compose.ymlは次のように記述します。

version: "3.9"  # v1.27.0 以降は任意
services:
  web:
    build: .
    ports:
      - "5000:5000"
    volumes:
      - .:/code
      - logvolume01:/var/log
    links:
      - redis
  redis:
    image: redis
volumes:
  logvolume01: {}

Compose ファイルに関するさらに詳しい情報は、Compose ファイルリファレンス をご覧ください。

Compose には、アプリケーションのライフサイクルを管理するコマンドがあります。

  • サービスの開始、停止、再構築
  • 実行中のサービスの状態を表示
  • 実行中のサービスのストリームログ出力
  • サービス上で1回限りのコマンドを実行

Compose のドキュメント

機能

Compose には特徴的な以下の機能があります。

1 つのホスト上で分離された環境を複数実現

Compose はプロジェクト名というものを用いて各環境を分離します。 このプロジェクト名はさまざまに異なる用途に利用することができます。

  • 開発ホスト上では 1 つの環境に対して複数のコピー作成に使います(例:プロジェクトの機能ブランチごとに、安定版のコピーを実行したい場合)。
  • CI サーバー上では、お互いのビルドが干渉しないようにするため、プロジェクト名にユニークなビルド番号をセットできます。
  • 共有ホストまたは開発ホスト上では、異なるプロジェクトが同じサービス名を使わないようにし、お互いを干渉しないようにします。

プロジェクト名はデフォルトでは、プロジェクトが存在するディレクトリ名となります。 プロジェクト名を指定するには、コマンドラインオプション-pを指定するか、環境変数 COMPOSE_PROJECT_NAME を使って指定します。

デフォルトのプロジェクトディレクトリは Compose ファイルのベースとなるディレクトリです。 これを変更するにはコマンドラインオプション--project-directoryを利用します。

コンテナー生成時はボリュームデータを維持

Compose は、サービスによって利用されているボリュームをすべて維持します。 docker-compose upが実行されたときに、コンテナーがそれ以前に実行されていれば、以前のコンテナーから現在のコンテナーに向けてボリュームをコピーします。 この処理において、ボリューム内に作り出されていたデータは失われることはありません。

Windows 上においてdocker-composeを利用している場合には、環境変数のページを参考にし、状況に応じて必要となる環境変数を定めてください。

変更のあったコンテナーのみ再作成

Compose はコンテナーが生成されたときの設定情報をキャッシュに保存します。 設定内容に変更のないサービスが再起動された場合、Compose はすでにあるコンテナーを再利用します。 再利用されるということは、全体として環境への変更がすばやくできることを意味します。

変数と環境間の移行

Compose は Compose ファイル内での変数の利用をサポートしています。 環境変数を使い、さまざまな環境、さまざまなユーザー向けに構成をカスタマイズできます。 詳細は 環境変数のページ をご覧ください。

Compose ファイルはextendsフィールドを使うことで、複数の Compose ファイルを作成できるように拡張できます。 extends をご覧ください。

一般的な利用例

Compose はさまざまな使い方があります。 一般的な利用例は、以下のとおりです。

開発環境

ソフトウェアを開発する上で、アプリケーションを分離された環境内にて実行させ、しかも正しくアクセスできるようにすることが極めて重要です。 Compose のコマンドラインツールを用いることで、環境生成と環境へのアクセスを行うことができます。

Compose ファイル は、アプリケーションにおけるサービスの依存関係(データベース、キュー、キャッシュ、ウェブ・サービス API など)を設定するものです。 Compose コマンドラインツールを使うと、いくつでもコンテナーを生成、起動でき、しかもコマンド(docker-compose up)を1つ実行するだけで、依存関係も正しく考慮してくれます。

さらにこういった機能は、プロジェクトに取りかかろうとしている開発者にとっても便利なものです。 Compose は、分厚く仕上がっている「開発者向け導入手順書」のページ数を減らすものになり、ただ 1 つの Compose ファイルと数えるほどのコマンドだけになります。

自動テスト環境

継続的デプロイや継続的インテグレーションのプロセスにおいて、自動テストスイートは極めて重要です。 もれることなくテストを自動化させるためには、そのためのテスト環境が必要になるものです。 Compose ではテストスイートに対応して、分離されたテスト環境の生成とデプロイを便利に行う機能を提供しています。 Compose ファイル 内に必要な環境定義を行っておけば、テスト環境の生成と削除は、ごく簡単なコマンドだけで実現できます。

$ docker-compose up -d
$ ./run_tests
$ docker-compose down

ただ 1 つのホストからのデプロイ

Compose はこれまで、開発環境やテスト環境でのワークフローに注目してきました。 しかしリリースを重ねるにつれて、本番環境を意識した機能を充実させるように進化しています。

本番環境向け機能の使い方については、本番環境における Compose をご覧ください。

リリースノート

Docker Compose のこれまでのリリースにおける変更点の一覧は CHANGELOG から確認することができます。

ヘルプを得るには

Docker Compose は活発に開発中です。 ヘルプが必要な場合、貢献したい場合、あるいはプロジェクトの仲間と話をしたい場合、コミュニケーションができるオープンチャネルがたくさんあrます。

  • バグ報告や機能リクエストは GitHub の issue トラッカーをご利用ください。

  • プロジェクトのメンバーとリアルタイムに会話したければ、Docker Community Slack の#docker-composeチャネルに参加してください。

  • コードやドキュメントの変更に貢献したい場合は、GitHub にプルリクエストを送ってください。

documentation, docs, docker, compose, orchestration, containers