Docker Compose 概要

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

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

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

  1. アプリケーション環境を Dockerfile に定義します。こうしてその環境は再構築が可能となります。
  2. アプリケーションを構成するサービスを docker-compose.yml ファイル内に定義します。こうすることで、各サービスは独立した環境において起動することになります。
  3. 最後に、docker-compose up を実行したら、Compose はアプリケーション全体を起動・実行します。

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

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

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

コンテナ作成時にボリューム・データの保持

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

Windows 上において docker-compose を利用している場合には、:doc:`環境変数 </reference/envvars>`_ を参考にし、状況に応じて必要となる環境変数を定めてください。

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

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 stop
$ docker-compose rm -f

単一ホストのデプロイ

Compose はこれまで、開発環境やテスト環境でのワークフローに注目してきました。しかしリリースを重ねるにつれて、本番環境を意識した機能を充実させるように進化しています。Compose はリモートにある Docker Engine に対してもデプロイすることができます。Docker Engine とは、 Docker Machine で提供される単一インスタンスであったり、 Docker Swarm クラスタ一式である場合もあります。

本番環境向けの機能の使い方については、 プロダクションの構成 をご覧ください。

リリースノート

Docker Compose の過去から現在に至るまでの詳細な変更一覧は、 CHANGELOG をご覧ください。

ヘルプを得るには

Docker Compose は活発に開発中です。ヘルプが必要な場合、貢献したい場合、あるいはプロジェクトの同志と対話したい場合、私たちは多くのコミュニケーションのためのチャンネルを開いています。

  • バグ報告や機能リクエストは、 GitHub の issue トラッカー をご利用ください。
  • プロジェクトのメンバーとリアルタイムに会話したければ、IRC の #docker-compose チャンネルにご参加ください。
  • コードやドキュメントの変更に貢献したい場合は、GitHub にプルリクエスト をお送りください。

より詳細な情報やリソースについては、私たちの ヘルプ用ページ(英語) をご覧ください。

参考

Overview of Docker Compose
https://docs.docker.com/compose/overview/