Docker Compose - Compose をプロダクションで使うには
原文:Using Compose in produciton
https://docs.docker.com/compose/production/
まだ Compose はプロダクション(本番)で使える状態ではありませんが、もし実験的、あるいはプロダクションへのデプロイの練習に使うのであれば、このガイドが役に立つでしょう。プロジェクトはプロダクションで使えるように作業が進行しています。進捗状況を知りたければ、ロードマップ(英語) で現在の状況や、足りないものを確認ください。
プロダクションへのデプロイ時、実行環境として適切な設定行ったアプリケーションを、あまり変更したくないでしょう。変更とは次のようなものです:
- アプリケーション用に割り当てられたボリュームを削除しますが、コンテナの中にコードは残したままとし、外から変更できなくする
- ホストに異なったポートを割り当てる
- 異なった環境変数を設定する(例えば、冗長なログの出力を減らしたり、メール送信を有効にするなど)
- ダウンタイムを避けるため、再起動ポリシーの指定(例:
restart: always
) - 外部サービスの追加(例:ログ集積)
これらの理由のため、例えばプロダクション向けの設定を production.yml
ファイルでという様に、環境にあわせ別々の Compose ファイルを定義したくなるでしょう。
メモ:extends キーワードは、複数の Compose ファイルを管理するノニ便利です。手動でコピーやペーストすることなく、共通サービスの再利用ができます。
別の設定ファイルを準備したら、Compose で COMPOSE_FILE
環境変数を使い、そのファイルを指定します。
$ COMPOSE_FILE=production.yml
$ docker-compose up -d
メモ:環境変数を使わずにワンオフ・コマンドを使ってもファイルを使えます。その場合は -f
フラグを使います。例:docker-compose -f production.yml up -d
変更のデプロイ
アプリケーションのコードを変更したときは、イメージを再構築し、アプリケーションのコンテナを作り直す必要があります。web
というサービスを再デプロイするには、次のようにします:
$ docker-compose build web
$ docker-compose up --no-deps -d web
これは、まず web
イメージの再構築するため、停止、破棄をしてから、web
サービスのみ再作成します。Compose に --nodeps
フラグを使うことで、web
に依存するサービスの再作成をしません。
単一サーバ上での Compose 実行
Compose を使えば、アプリケーションをリモートの Docker ホストにデプロイできます。その時に、適切な環境変数 DOCKER_HOST
、DOCKER_TLS_VERIFY
、DOCKER_CERT_PATH
を使います。この処理を行うために、Docker Machine を使えばローカルやリモートの Docker ホストを非常に簡単にします。これはリモートにデプロイする必要が無くてもお薦めします。
環境変数を設定するだけで、更に他の設定を行わなくてもdocker-compose
コマンドを普通に使えます。
Swam クラスタで Compose を実行する。
Docker Swarm は Docker 独自のクラスタリング・システムで、単一の Docker ホストと同じ API を持っています。つまり、Compose は Swarm インスタンスと一緒に使うことができ、アプリケーションを複数のホストで実行します。
Compose と Swarm の連携は、まだ実験的な段階です。Swarm もベータ版です。ですが、実験的に試してみたいのであれば、integration guideをお読みください。