Compose を 本番環境(production) で使う

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

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

Compose ファイルを本番環境向けに書き換え

アプリケーションの設定を本番環境に適用するには、おそらく書き換えが必要でしょう。以下のような変更が必要になるかもしれません:

  • アプリケーションのコードに 結び付けている(bind) ボリュームを削除する。そのため、コードはコンテナ内に残り続けるため、外から変更できなくなる。

  • ホスト上では異なるポートに割り当てる

  • コンテナのコードを外から変更できなくするため、アプリケーション・コード用に割り当てたボリュームを削除する。

  • ホストに異なったポートを割り当てる。

  • 異なった環境変数を割り当てる。たとえば、冗長なログの出力を減らす、あるいは、メールサーバのような外部サービスへの設定を指定する。

  • 再起動ポリシーを指定し(例: 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-compose コマンドが普通に使えます。

Compose のドキュメント

参考

Using Compose in production

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