1、创建service
#-p 80:80 http端口映射到公网 --replicas 2 2个容器 --name 服务名称 dockercloud/hello-world 镜像名称
test@swarm-master:~$ docker service create -p 80:80 --replicas 2 --name myhelloworld2 dockercloud/hello-world 9ypnuj72zc2jufhkh7cfp413r
2、缩扩容器
2.1服务容器数量缩减少为1个
test@swarm-master:~$ docker service scale myhelloworld2=1 myhelloworld2 scaled to 1
如下图所示myhelloworld2 只有一个容器,并且在swarm-master(192.168.1.80)上面

访问swarm-master(192.168.1.80),swarm-node1(192.168.1.73),指向同一个容器(f52a4217f329)。
test@swarm-master:~$ curl http://192.168.1.80/|grep hostname % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 473 0 473 0 0 45245 0 --:--:-- --:--:-- --:--:-- 52555 <h3>My hostname is f52a4217f329</h3> </body> test@swarm-master:~$ curl http://192.168.1.73/|grep hostname % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 473 0 473 0 0 38234 0 --:--:-- --:--:-- --:--:-- 43000 <h3>My hostname is f52a4217f329</h3> </body>
#疑问 容器在swarm-master(192.168.1.80)启动,但是在swarm-node1(192.168.1.73)仍能访问
#service 映射端口是在所有swarm节点映射相同端口,当访问的机器没有该端口对应的容器,会跳转到其他有容器的节点上面
2.2 服务器容器数量扩展为3
test@swarm-master:~$ docker service scale myhelloworld2=3 myhelloworld2 scaled to 3
#如下图3个容器,swarm-node1 2个容器,swarm-master 1个容器

#访问测试 3次请求,分别分配到3台容器上面,开来是平均分配的。
test@swarm-master:~$ curl http://192.168.1.80/|grep hostname % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 473 0 473 0 0 31349 0 --:--:-- --:--:-- --:--:-- 36384 <h3>My hostname is f52a4217f329</h3> </body> test@swarm-master:~$ curl http://192.168.1.80/|grep hostname % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 473 0 473 0 0 37743 0 --:--:-- --:--:-- --:--:-- 43000 <h3>My hostname is 6adf7d28c639</h3> </body> test@swarm-master:~$ curl http://192.168.1.80/|grep hostname % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 473 0 473 0 0 30660 0 --:--:-- --:--:-- --:--:-- 39416 <h3>My hostname is 58ab1ee1cce2</h3> </body>
3 服务升级
#懒得搭建registry服务器,就随便打个tag 作为升级image,还好swarm一个节点有镜像其他节点都可以用。
做个测试镜像mytest
test@swarm-master:~$ docker image tag dockercloud/hello-world mytest
看下当前容器版本
test@swarm-master:~$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f52a4217f329 dockercloud/hello-world:latest "/bin/sh -c /run.sh" About an hour ago Up About an hour 80/tcp myhelloworld2.2.ia09q7zyok9vti8np47bpartw
升级容器版本
test@swarm-master:~$ docker service update --image mytest myhelloworld2
查看升级后版本
test@swarm-master:~$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES dfca160c1097 mytest:latest "/bin/sh -c /run.sh" 22 seconds ago Up 10 seconds 80/tcp myhelloworld2.3.3vgw0u1fza6isoao9f8o6iadb 0b2b68c21ab4 mytest:latest "/bin/sh -c /run.sh" 37 seconds ago Up 25 seconds 80/tcp myhelloworld2.2.9x9lyv443tkk9b68pt11spmt0
4 查看服务
test@swarm-master:~$ docker service ls ID NAME MODE REPLICAS IMAGE PORTS neljh6f52ziz myhelloworld2 replicated 2/2 mytest:latest *:80->80/tcp
5 删除服务
test@swarm-master:~$ docker service rm myhelloworld2 myhelloworld2
浙公网安备 33010602011771号