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_HOST
、 DOCKER_TLS_VERIFY
、 DOCKER_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/