Docker Compose 概要

参考

Compose ファイルのリファレンスを探していますか? 最新バージョンはこちらです。

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

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

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

  1. アプリケーションの環境を Dockerfile に定義すると、アプリケーションはどこでも再構築できるようになります。

  2. アプリケーションを構成するサービスを docker-compose.yml ファイル内に定義すると、各サービスは 独立した(isolated) 環境で同時に実行できるようになります。

  3. docker compose up を実行すると、この Docker compose コマンド によって、アプリ全体を起動・実行します。あるいは、 docker-compose バイナリを使えば、 docker-compose up でも実行できます。

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

version: "3.9"  # v1.27.0 からはオプション
services:
  web:
    build: .
    ports:
      - "8000:5000"
    volumes:
      - .:/code
      - logvolume01:/var/log
    links:
      - redis
  redis:
    image: redis
volumes:
  logvolume01: {}

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

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

  • サービスの開始、停止、再構築

  • 実行中のサービスの状態を表示

  • 実行中のサービスのストリーム・ログ出力

  • サービス上で1回限りのコマンドを実行

Compose V2 と新しい docker compose コマンド

Docker Compose 発展の背景

Compose specification (仕様) の導入により、Compose YAML ファイルの構造と、 docker-compose の実装を明確に区別するようになりました。この変更により、多くの拡張ができるようになりました。その中には、 Docker CLI の中に compose コマンドを直接追加できるようにし、 Docker コンテクストをシンプルに切り替えるだけで、クラウドプラットフォーム上に Compose アプリケーションを "up" (起動)できるようにします。さらに、 Amazon ECSMicrosoft ACI 上でも起動できます。Compose 規格の発展により、Docker CLI に新しい機能が早く取り込まれます。

Compose V2 は 仕様(specification) の一部として保守されている compose-go との結合に直接依存します。これにより、私たちは Docker CLI や Engine に対し、コミュニティからの提案や実験的な実装を導入できるようになり、さらに利用者に対して機能を早く提供できます。また、 Compose V2 は profilesGPU のような、新しく仕様に追加されたいくつかもサポートしています。

Compose V2 は Go 言語 で書き直されており、ほかの Docker コマンドライン機能との統合が改善されました。さらに、 Python のような依存関係を必要としないため、 Apple silicon 対応の macOS 、Windows 、 Linux でネイティブで実行できます。

compose v1 コマンドラインとの互換性に関する詳しい情報は、 docker-compose 互換性一覧 をご覧ください。

機能

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

単一ホスト上で、複数の環境を 分離(isolate)

Compose は プロジェクト名(project name) を使い、お互いの環境を 分離(isolate) します。このプロジェクト名は、いくつもの異なる用途に利用できます。

  • 開発ホスト上では、プロジェクトの機能ブランチごとに安定版をコピーするように、ある環境のコピーを複数作成します。

  • CI サーバ上では、お互いのビルドが干渉しないようにし続けるため、プロジェクト名にユニークなビルド番号を設定できます。

  • 共有ホストや開発ホスト上では、異なるプロジェクトが同じサービス名を使わないようにし、お互いを干渉しないようにします。

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

デフォルトの プロジェクト ディレクトリ(project directory) とは、Compose ファイルがある ベース ディレクトリ(base directory) です。コマンドラインのオプション --project-directory で任意の値を定義できます。

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

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

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

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

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

環境間で変数の共有

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

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

単一ホストのデプロイ

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

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

リリースノート

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

ヘルプを得るには

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

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

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

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

参考

Overview of Docker Compose

https://docs.docker.com/compose/overview/