docker_swarm运行service replicas global
[root@node1 ~]# docker create --name web_server httpd 运行一个httpd服务
注:默认情况下只有一个副本(期望值)正在运行
运行的容器会在三个节点中任意一个节点运行:
[root@node1 ~]# docker service ls #该命令代表目前有几个service正在运行
一般来讲我们会在一个服务中部署多个副本(replicas)
期望值副本:在集群当中保持副本数量不变
全局模式的副本
[root@node1 ~]# docker service ps web_server #当前web_server的运行状态
要想查看正在运行的状态,除了在mananger上用上述命令查看意外,也可以在node上用docker ps查看
进入容器:
docker如何实现service伸缩
实现service(副本)的弹性伸缩,当访问量过大的时候可以瞬间增加我们的service数量承接我们的访问量,当访问量减少的时候,所见我们的service数量来减少我们访问量的承接
命令:[root@node1 ~]# docker service scale web_server=5
注:除了以上命令可以查看,也可以通过图形界面查看
通过情况下我们不希望manager也参与运算,我们希望manager 是一个高效的、独立的,永远指挥worker端工作的节点。
驱离命令:[root@node1 ~]# docker node update --availability drain node1
回来的命令:[root@node1 ~]# docker node update --availability active node1
可以通过docker node ls查看是否参与运算
缩减:[root@node1 ~]# docker service scale web_server=3
如何访问service
[root@node1 ~]# docker service rm web_server #删除service
[root@node1 ~]# docker service create --name web_server --replicas 2 httpd #创建两个service,其中两个副本
在我们没有添加网络的情况下,我们部署的service全部桥接到docker0上
查看:
现在访问httpd可以访问到curl 172.17.0.2(注:此时只能访问到容器内自动分配的网址,物理机的网址(192.168.88.28:80)无法访问,而且由于容器内的地址不是全局地址,所以只能在本机上访问自己的service)
外网访问内网需要走端口映射。
[root@node1 ~]# docker service update --publish-add 8080:80 web_server #增加端口映射
设置端口映射后,三台node节点全部开始监听web_server8080端口,但是因为部署service的node节点只有两台worker,所以并不是三台node都工作,而是三台监听,两台工作
在设置完端口映射后,在所有的node节点都可以访问物理机的ip:8080(外网也可访问)
在docker swarm环境中routing mesh
routing mesh 将外部请求转发到内部主机。(overlay网络)
命令:[root@node1 ~]# docker network ls #查看所有网络
docker run -it --network container:web_server.1.t6rmod0xcr4e6b8bmr89c4rf6 busybox sh #运行busybox和httpd使用相同的网卡
发现多了一块网卡
172.18.0.0/16是桥接到物理机的docker_gwbridge网卡,用于本地上网
10.255.0.0/16是用于外网访问服务,由于分配了这个网络,外网访问三台主机的任意一台都能访问到服务。