2つのノード、1つのマネージャーと1つのワーカーで設定された群れがあります。アプリケーションにアクセスできるように、スウォームにポートを公開したいのですが、どうすればこれを実現できるのでしょうか。
version: '2'
services:
server:
build: .
image: my-hub.company.com/application/server:latest
ports:
- "80:80"
これにより、docker-compose upを実行するとポート80が公開され、問題なく動作しますが、バンドルされたデプロイを実行すると
docker deploy my-service
これはポートを公開しないため、ポートを指す代わりに、dockerpsで80/tcpと表示されます。おそらくこれは、ロードバランサーを接続するか、いくつかの凝ったコマンドを実行するか、マルチホストスウォームでこのポートを実際に公開するために構成の別のレイヤーを追加する必要があるためです。
誰かが私がこれをポートを公開するために構成/実行する必要があることを理解するのを手伝ってくれますか?.
私の最良のシナリオは、ポート80が公開されており、異なるホスト名からアクセスすると、異なるアプリケーションに送信されることです。
更新:アプリケーションをデプロイした後に次のコマンドを実行すると機能するようです
docker service update -p 80:80 my-service_server
docker kill <my-service_server id>
HAプロキシを実行するためのこのリポジトリを見つけました。これは素晴らしいようで、docker自体によってサポートされていますが、新しいスウォームモードを使用してこれをサービスに個別に適用することはできないようです。
https://github.com/docker/dockercloud-haproxy
ネットワークがどのように見えるべきかを説明する素晴らしい説明が下部にあります:
Internet -> HAProxy -> Service_A -> Container A
ただし、docker service createコマンドを使用してサービスをリンクする方法が見つかりません。最適には、ネットワークをセットアップする方法のように見えます。このネットワークをサービスに適用すると、HAProxyで取得されます。
-マーカス
スウォームモードは、別の方法でポートを公開します。ホスト上のポートを公開していないため、docker ps
には表示されません。ポートをすべてのノードに公開して、サービスレプリカ間の負荷分散を可能にします。
docker service inspect my-service
からポートが表示されます。
他のサービスはmy-service:80
に接続できる必要があります
私が今のところ理解している限り、作成後にサービスを更新するポートを公開すると、次のようになります。
docker service update my-service --publish-add 80:80
docker service ls
はポートマッピングを表示します。