Docker Compose 概要¶
Compose とは、複数のコンテナを使う Docker アプリケーションを、定義・実行するツールです。Compose はアプリケーションのサービスの設定に、Compose ファイルを使います。そして、コマンドを1つ実行するだけで、設定した全てのサービスを作成・起動します。Compose の全機能一覧について学ぶには、 機能一覧 をご覧ください。
Compose は開発環境、テスト、ステージング環境だけでなく、CI ワークフローにも適しています。それぞれの使い方の詳細を学ぶには、 一般的な利用例 をご覧ください。
Compose を使うには、基本的に3つのステップを踏みます。
- アプリケーションの環境を
Dockerfile
ファイルで定義します。このファイルは、どこでも再利用可能です。 - アプリケーションを構成する各サービスを
docker-compose.yml
ファイルで定義します。そうすることで、独立した環境を一斉に実行できるようにします。 - 最後に、
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 ファイル は、文章化と、アプリケーション全ての依存関係(データベース、キュー、キャッシュ、ウェブ・サービス、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 は活発に開発中です。ヘルプが必要な場合、貢献したい場合、あるいはプロジェクトの同志と対話したい場合、私たちは多くのコミュニケーションのためのチャンネルを開いています。
- バグ報告や機能リクエストは、 GitHub の issue トラッカー をご利用ください。
- プロジェクトのメンバーとリアルタイムに会話したければ、IRC の
#docker-compose
チャンネルにご参加ください。 - コードやドキュメントの変更に貢献したい場合は、GitHub にプルリクエスト をお送りください。
より詳細な情報やリソースについては、私たちの ヘルプ用ページ(英語) をご覧ください。
参考
- Overview of Docker Compose
- https://docs.docker.com/compose/overview/