演示
创建服务
$ docker service create --name web --publish 80:80 --replicas 3 10.128.222.245:5000/nginx
- --name 服务名称
- --publicsh 服务发现端口:端口映射
- --replicas 服务副本
查看正在运行的服务
$ docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
lk8m77mamg4p web replicated 3/3 10.128.222.245:5000/nginx:latest *:80->80/tcp
缩放/扩容(服务)
将服务副本数量调整到2
$ docker service update --replicas 2 web
web
查看正在运行的服务
docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
lk8m77mamg4p web replicated 2/2 10.128.222.245:5000/nginx:latest *:80->80/tcp
查看“web”服务节点分布状态
$ docker service ps web
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
p7zmqlvgkgtn web.1 10.128.222.245:5000/nginx:latest worker2 Running Running 12 minutes ago
sq52skxkv823 web.2 10.128.222.245:5000/nginx:latest manager Running Running 12 minutes ago
负载均衡
docker swarm容器浏览视图:10.128.223.234:8080
访问集群中的web服务(集群中只有2个节点提供web服务,但是3个节点都能够正确访问到web服务):
- 10.128.223.234
- 10.128.223.235
- 10.128.223.236
滚动更新
用户可以逐渐对节点应用服务更新。群组管理器允许允许控制服务部署到不同节点集之间的延迟。如果出现任何问题,可以将任务回滚到先前版本的服务。
docker service update --image 10.128.222.245:5000/nginx:v2 web
运行docker service ps <SERVICE-ID>观看滚动更新:
$ docker service ps web
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
mudttug1llj0 web.1 10.128.222.245:5000/nginx:v2 worker2 Running Preparing 4 seconds ago
p7zmqlvgkgtn \_ web.1 10.128.222.245:5000/nginx:latest worker2 Shutdown Shutdown 3 seconds ago
43cmbt0p0zz3 web.2 10.128.222.245:5000/nginx:v2 worker1 Running Running 4 seconds ago
sq52skxkv823 \_ web.2 10.128.222.245:5000/nginx:latest manager Shutdown Shutdown 9 seconds ago
默认情况下,调度程序应用滚动更新如下:
- 停止第一个任务
- 计划已停止任务的更新。
- 启动更新任务的容器。
- 如果任务的更新返回RUNNING,等待指定的延迟时间,然后启动下一个任务。
- 如果在更新期间的任何时间任务返回FAILED,将停止更新;服务回滚到先前版本。
访问web服务(10.128.223.234),服务更新成功。