Docker Compose 概要

Compose とは、複数のコンテナを使う Docker アプリケーションを、定義・実行するツールです。Compose はアプリケーションのサービスの設定に、Compose ファイルを使います。そして、コマンドを1つ実行するだけで、設定した全てのサービスを作成・起動します。Compose の全ての機能一覧について学ぶには、 機能一覧 をご覧ください。

Compose は開発環境、テスト、ステージング環境だけでなく、CI ワークフローにも適しています。それぞれの使い方の詳細を学ぶには、 一般的な利用例 をご覧ください。

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

  1. アプリケーションの環境を Dockerfile ファイルで定義します。このファイルは、どこでも再利用可能です。
  2. アプリケーションを構成する各サービスを docker-compose.yml ファイルで定義します。そうすることで、独立した環境を一斉に実行できるようにします。
  3. 最後に、docker-compose up を実行すると、Compose はアプリケーション全体を起動・実行します。

docker-compose.yml は次のようなものです。

version: '2'
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 はサービスが使う全てのボリュームを保持(preserve)します。 docker-compose up を実行するとき、以前に実行したコンテナがあることが分かれば、古いコンテナから新しいコンテナにボリュームをコピーします。この処理こそが、ボリューム内で作成したデータを失わないよう守ります。

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

Compose はコンテナ作成時に使う設定情報をキャッシュします。サービスの再起動時に、内容に変更がなければ、Compose は既存のコンテナを再利用します。コンテナの再利用とは、環境をとても速く作り直せるのを意味します。

環境間で変数の共有

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

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

一般的な利用例

Compose は様々な使い方があります。一般的な利用例は、以下の通りです。

開発環境

ソフトウェアの開発時であれば、アプリケーションを別々の環境で相互にやりとりするのは重要です。Compose のコマンドライン・ツールは環境の作成と、相互のやりとりのために使えます。

Compose ファイル は、文章化と、アプリケーション全ての依存関係(データベース、キュー、キャッシュ、ウェブ・サービス、API 等)を設定するものです。Compose コマンドライン・ツールを使うと、コマンドを1つ( docker-compose up )実行するだけで、各依存関係に応じて1つまたは複数のコンテナを作成します。

同時に、開発者がプロジェクトを開始する時に役立つ機能を提供します。Compose は、複数のページにわたる「開発者向け導入ガイド」を減らします。それをマシンが読み込み可能な Compose ファイルと、いくつかのコマンドで実現します。

自動テスト環境

継続的デプロイや継続的インテグレーションのプロセスにおいて重要な部分は、自動テストの実装です。自動的なエンド間(end-to-end)のテストは、テストを行う環境が必要になります。テスト実装にあたり、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/