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

開発環境で Compose を使ってアプリケーションを定義しておけば、その設定を使い、アプリケーションを CI 、ステージング、プロダクションのような異なった環境で実行できます。

アプリケーションをデプロイする最も簡単な方法は、単一サーバ上での実行です。これは開発環境で実行する方法と似ています。アプリケーションをスケールアップしたい場合には、Compose アプリを Swarm クラスタ上で実行できます。

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 の連携は、 統合ガイド をお読みください。

Compose のドキュメント

参考

Using Compose in production

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