docker swarm service服务端口监听
当我们使用docker service create --publish
序列号 | CPU | RAM | HDD | 带宽 | 售价(美元) | 免费试用 |
---|---|---|---|---|---|---|
香港服务器1 | E5-2620 | 32G | 1T HDD | 50M/无限流量 | $196.00 | 立即申请 |
香港服务器2 | E5-2650 | 32G | 1T HDD | 50M/无限流量 | $256.00 | 立即申请 |
香港服务器3 | E5-2680 | 32G | 1T HDD | 50M/无限流量 | $316.00 | 立即申请 |
香港服务器4 | E5-2690 | 32G | 1T HDD | 50M/无限流量 | $336.00 | 立即申请 |
香港服务器5 | E5-2697 | 32G | 1T HDD | 50M/无限流量 | $376.00 | 立即申请 |
香港服务器6 | E5-2620*2 | 32G | 1T HDD | 50M/无限流量 | $376.00 | 立即申请 |
香港服务器7 | E5-2650*2 | 32G | 1T HDD | 50M/无限流量 | $436.00 | 立即申请 |
香港服务器8 | E5-2680*2 | 32G | 1T HDD | 50M/无限流量 | $476.00 | 立即申请 |
香港服务器9 | E5-2690*2 | 32G | 1T HDD | 50M/无限流量 | $556.00 | 立即申请 |
香港服务器10 | E5-2697*2 | 32G | 1T HDD | 50M/无限流量 | $596.00 | 立即申请 |
香港服务器11 | E5-2680v4*2 | 32G | 1T HDD | 50M/无限流量 | $696.00 | 立即申请 |
香港服务器12 | E5-2698v4*2 | 32G | 1T HDD | 50M/无限流量 | $796.00 | 立即申请 |
答案是会监听在swarm网络上的所有node上。
举例来说:假如我们有5台主机:vm1, vm2, vm3,vm4,和vm5其中manager是vm1,vm2,vm3worker是vm4,和vm5
当我们在任何一台manager主机上创建service时,假设--replicas=2,例如:
$dockerservicecreate\--namemy_web\--replicas2\--publishpublished=8080,target=80\--network
这样swarm会在5台vm上任选两台主机,创建两个continers,他们可能在manager节点上,也可能在worker节点上,随机分配。但是published的8080端口会监听在所有的5台vm上,可以使用任意vm[1-5]:8080地方来访问nginx,例如:
curlhttp://vm1:8080/curlhttp://vm2:8080/curlhttp://vm3:8080/curlhttp://vm4:8080/curlhttp://vm4:8080/
达到同样的效果。
另外由于我们创建了两个container,那么具体哪一个contaier提供服务呢?docker swarm使用round robin的策略:第一个请求达到container1,第二个请求到container2,下一个再到container1,然后下下一个到contiainer2,如此轮询。
如果在my-overlay-network里面,用户也可以使用curl http://service-name:80/来访问nginx,然后在container层面,还是使用轮询的方式。