Compose をプロダクションで使う

プロダクションへのデプロイ時は、多くの場合、アプリケーションを適切に実行できるようにするために変更を加えるでしょう。変更とは次のようなものです。

  • コンテナのコードを外から変更できなくするため、アプリケーション・コード用に割り当てたボリュームを削除する。
  • ホストに異なったポートを割り当てる。
  • 異なった環境変数を割り当てる(例:冗長なログの出力を減らす、あるいは、メールの送信を有効化)
  • 再起動ポリシーを指定し(例: restart: always )、停止時間を減らす
  • 外部サービスの追加(例:ログ収集)

このような理由のため、production.yml のような追加 Compose ファイルを使い、プロダクションに相応しい設定を定義したくなるでしょう。この設定ファイルには、元になった Compose ファイルからの変更点のみ記述できます。追加の Compose ファイルは、元の docker-compose.yml の設定を上書きする新しい設定を指定できます。

2つめの設定ファイルを使うには、Compose で -f オプションを使います。

$ docker-compose -f docker-compose.yml -f production.yml up -d

詳細は例は 複数のComposeファイルを使用 をご覧ください。

変更のデプロイ

アプリケーションのコードを変更したときは、イメージを再構築し、アプリケーションのコンテナを作り直す必要があります。web という名称のサービスを再デプロイするには、次のように実行します。

$ docker-compose build web
$ docker-compose up --no-deps -d web

これは、まず web イメージを再構築するために(コンテナを)停止・破棄します。それから web サービス のみ 再作成します。--no-deps フラグを使うことで、Compose が web に依存するサービスを再作成しないようにします。

単一サーバ上でのコンテナ実行

Compose を使い、アプリケーションをリモートの Docker ホスト上にデプロイできます。このとき、適切な環境変数 DOCKER_HOSTDOCKER_TLS_VERIFYDOCKER_CERT_PATH を使います。このような処理は、 Docker Machine を使うことで、ローカルやリモートの Docker ホストの管理を非常に簡単にします。リモートにデプロイする必要がなくても、お勧めです。

環境変数を設定するだけで、追加設定なしに docker-compose コマンドが普通に使えます。

Swarm クラスタで Compose を実行する

Docker Swarm とは、Docker 独自のクラスタリング・システムで、単一の Docker ホスト向けと同じ API を持っています。つまり、Compose を Swarm インスタンスも同様に扱えるので、アプリケーションを複数のホスト上で実行できることを意味します。

Compose と Swarm の連携は、まだ実験的な段階です。ですが、調べたり使ってみたい場合は 統合ガイド をお読みください。