我有一个由三个节点组成的群:
$ sudo docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
i12s3zxsn4vu1c98bv3i5idr8 node03 Ready Active
i2ckxvsju4tmommxim3dbfq7l node02 Ready Active
wak4isl46dn7pbo39drrhphju * node01 Ready Active Leader
然后我在那个 swarm 上运行 1 个 nginx 副本并将他的端口映射到 8080:
$ sudo docker service create --replicas 1 --publish 8080:80 --name nginx nginx
$ sudo docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
neahnb9mvi1i nginx replicated 1/1 nginx:latest *:8080->80/tcp
从那里,我可以通过http://node01:8080访问 nginx
接下来,我将 nginx 实例扩展到 6 个:
$ sudo docker service scale nginx=6
$ sudo docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
neahnb9mvi1i nginx replicated 6/6 nginx:latest *:8080->80/tcp
从那里,我仍然可以在http://node01:8080上访问 nginx 。
但是,如果 docker swarm 将多个节点公开为唯一的主机,那么在我所有的 nginx 服务都映射在同一个 8080 端口上的这种扩展操作期间,他如何管理该端口?swarm 在内部完成的所有服务实例之间是否存在循环负载平衡并在 8080 上返回答案?