同じネットワークの一部であるサービス(コンテナ)の場合は、単にサービス名を使用できます。 Dockerには、IP解決を処理するDNSリゾルバが含まれています。サービスをオーバーレイネットワークの一部にする必要があります。オーバーレイネットワークは、複数のノードにまたがることができます。
例:
services:
myapp:
image: myimage:1.0
deploy:
replicas: 1
networks:
- privnet
maindb:
image: mysql
deploy:
replicas: 1
networks:
- privnet
networks:
privnet:
driver: overlay
これは、2つのサービスでオーバーレイネットワークを作成します。対応するコンテナは、任意のノードで作成できます。それは問題ではありません。彼らはすべて同じオーバレイネットワークの一部であるため、互いに通信することができます。 myapp内では、maindb
をmysqlサービスのDNSとして使用できます。これはDockerによってprivnetネットワーク内の適切なIPに解決されます。
btw、ノードが2つの群れクラスタはあまり意味がありません。 Swarmは、Raftコンセンサスプロトコルが動作するために最低3つのノードを必要とします。 https://raft.github.io