2016-04-20 20 views
1

私は現在、Docker Composeファイル経由で単一のホスト上で実行しているアプリケーションを持っています。コンテナは、RabbitMQコンテナを介して互いに通信します(したがって、それらはすべてリンクされています)。アプリケーションは私の単一のホストが提供できるよりも多くのリソースを必要とし始めているので、Docker Swarmは理想的だと思ったのは、同じComposeファイルを経由して同じコンテナのセットをスピンアップできるということです。Docker Swarm + Docker作成:異なるノードでリンクされたコンテナを実行していますか?

しかし、リンクされたコンテナは同じノード上に存在するように制約されているため、複数のノードにDocker Swarmを設定しても、私が探しているコンテナ配布にはなりません。

アンバサダーパターンは、(各ノードのリンクされたコンテナーのプロキシーを設定することによって)リンクされたコンテナーを分離するために推奨される方法のようですが、ドッカーの作成ファイルでは、共有サービス(私の場合はRMQ)を実行しているノードのIPを使用して、クライアントのアンバサダーコンテナにリンクされたサービスのデータをどこにルーティングするかを伝える環境変数を設定しますhttps://docs.docker.com/engine/admin/ambassador_pattern_linking/)。これをComposeファイルに変換すると、サービスが実行されるIPを知る必要はありません(Docker SwarmはComposeファイルの完成後にこれを決定するでしょう)。

答えて

3

リンクの使用はdeprecatedです。代わりに、あなたはそのネットワークへのすべてのコンテナを追加することができcreate a new networkと:Networking documentation for Composeによると、そのようなネットワークがあなたのコンファイルを自動的に作成され

$ docker network create myapp 

注意。

これは、Composeがすでにネットワークを自動的に作成しており、そのコンテナ名を使用してすべてのコンテナにそのネットワーク内で到達可能である必要があるため、リンクやネットワークを設定する必要はありません。

また、いくつかの制限についてはUsing Compose with Swarmをご覧ください。

関連する問題