本文共 18554 字,大约阅读时间需要 61 分钟。
[root@swarm-manager ~]# cat > ./sources.list <deb http://mirrors.aliyun.com/debian stretch main contrib non-free> deb http://mirrors.aliyun.com/debian stretch-proposed-updates main contrib non-free> deb http://mirrors.aliyun.com/debian stretch-updates main contrib non-free> deb http://mirrors.aliyun.com/debian-security/ stretch/updates main non-free contrib> END[root@swarm-manager ~]# cat DockerfileFROM nginx:latestADD sources.list /etc/apt/sources.listRUN apt-get update && apt-get install -y dnsutils iproute2 net-tools curl && apt-get cleanADD index.html /usr/share/nginx/html/index.html[root@swarm-manager ~]# echo "nginx:v1" > index.html[root@swarm-manager ~]# docker build -t registry.cn-hangzhou.aliyuncs.com/vnimos/nginx:v1 .[root@swarm-manager ~]# echo "nginx:v2" > index.html[root@swarm-manager ~]# docker build -t registry.cn-hangzhou.aliyuncs.com/vnimos/nginx:v2 .[root@swarm-manager ~]# docker push registry.cn-hangzhou.aliyuncs.com/vnimos/nginx:v1[root@swarm-manager ~]# docker push registry.cn-hangzhou.aliyuncs.com/vnimos/nginx:v2
[root@swarm-manager ~]# docker service create --name nginx registry.cn-hangzhou.aliyuncs.com/vnimos/nginx:v1[root@swarm-manager ~]# docker service lsID NAME MODE REPLICAS IMAGE PORTS63c04khgjl03 nginx replicated 1/1 registry.cn-hangzhou.aliyuncs.com/vnimos/nginx:v1[root@swarm-manager ~]# docker service ps nginxID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTSzo87xl8e3in9 nginx.1 registry.cn-hangzhou.aliyuncs.com/vnimos/nginx:v1 swarm-node1 Running Running 4 minutes ago
[root@swarm-manager ~]# docker service update --network-add my-network --publish-add 80:80 nginx[root@swarm-manager ~]# docker service lsID NAME MODE REPLICAS IMAGE PORTS63c04khgjl03 nginx replicated 1/1 registry.cn-hangzhou.aliyuncs.com/vnimos/nginx:v1 *:80->80/tcp[root@swarm-manager ~]# docker service ps nginxID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTSlppql3gw8phx nginx.1 registry.cn-hangzhou.aliyuncs.com/vnimos/nginx:v1 swarm-node1 Running Running 3 minutes agozo87xl8e3in9 \_ nginx.1 registry.cn-hangzhou.aliyuncs.com/vnimos/nginx:v1 swarm-node1 Shutdown Shutdown 3 minutes ago
[root@swarm-manager ~]# docker service scale nginx=2[root@swarm-manager ~]# docker service ps nginxID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTSlppql3gw8phx nginx.1 registry.cn-hangzhou.aliyuncs.com/vnimos/nginx:v1 swarm-node1 Running Running 4 minutes agozo87xl8e3in9 \_ nginx.1 registry.cn-hangzhou.aliyuncs.com/vnimos/nginx:v1 swarm-node1 Shutdown Shutdown 4 minutes agoqqptr8htux76 nginx.2 registry.cn-hangzhou.aliyuncs.com/vnimos/nginx:v1 swarm-node2 Running Running 2 minutes ago
[root@swarm-manager ~]# curl 127.0.0.1nginx:v1
[root@swarm-manager ~]# docker service update --image registry.cn-hangzhou.aliyuncs.com/vnimos/nginx:v2 nginx[root@swarm-manager ~]# docker service ps nginxID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTSiwpnzn3ss6uo nginx.1 registry.cn-hangzhou.aliyuncs.com/vnimos/nginx:v2 swarm-node1 Running Running 4 minutes agolppql3gw8phx \_ nginx.1 registry.cn-hangzhou.aliyuncs.com/vnimos/nginx:v1 swarm-node1 Shutdown Shutdown 4 minutes agozo87xl8e3in9 \_ nginx.1 registry.cn-hangzhou.aliyuncs.com/vnimos/nginx:v1 swarm-node1 Shutdown Shutdown 5 minutes ago1c47y3e14dc0 nginx.2 registry.cn-hangzhou.aliyuncs.com/vnimos/nginx:v2 swarm-node2 Running Running 3 minutes agoqqptr8htux76 \_ nginx.2 registry.cn-hangzhou.aliyuncs.com/vnimos/nginx:v1 swarm-node2 Shutdown Shutdown 3 minutes ago[root@swarm-manager ~]# curl 127.0.0.1nginx:v2
[root@swarm-manager ~]# docker service update --rollback nginxnginx[root@swarm-manager ~]# docker service ps nginxID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTSxign4i5kxc0m nginx.1 registry.cn-hangzhou.aliyuncs.com/vnimos/nginx:v1 swarm-node1 Running Running 3 minutes agoiwpnzn3ss6uo \_ nginx.1 registry.cn-hangzhou.aliyuncs.com/vnimos/nginx:v2 swarm-node1 Shutdown Shutdown 3 minutes agolppql3gw8phx \_ nginx.1 registry.cn-hangzhou.aliyuncs.com/vnimos/nginx:v1 swarm-node1 Shutdown Shutdown 5 minutes agozo87xl8e3in9 \_ nginx.1 registry.cn-hangzhou.aliyuncs.com/vnimos/nginx:v1 swarm-node1 Shutdown Shutdown 6 minutes agoem9hv301ga5f nginx.2 registry.cn-hangzhou.aliyuncs.com/vnimos/nginx:v1 swarm-node2 Running Running 3 minutes ago1c47y3e14dc0 \_ nginx.2 registry.cn-hangzhou.aliyuncs.com/vnimos/nginx:v2 swarm-node2 Shutdown Shutdown 3 minutes agoqqptr8htux76 \_ nginx.2 registry.cn-hangzhou.aliyuncs.com/vnimos/nginx:v1 swarm-node2 Shutdown Shutdown 4 minutes ago[root@swarm-manager ~]# curl 127.0.0.1nginx:v1
[root@swarm-manager ~]# docker service update --health-cmd "curl -f http://localhost/ || exit 1" nginx[root@swarm-node1 ~]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESf7e1935f1c22 registry.cn-hangzhou.aliyuncs.com/vnimos/nginx:v1 "nginx -g 'daemon ..." 17 seconds ago Up 12 seconds (health: starting) 80/tcp nginx.1.9dz6g3bizl4kwh8lctr552c6a[root@swarm-node1 ~]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESf7e1935f1c22 registry.cn-hangzhou.aliyuncs.com/vnimos/nginx:v1 "nginx -g 'daemon ..." 44 seconds ago Up 38 seconds (healthy) 80/tcp nginx.1.9dz6g3bizl4kwh8lctr552c6a
可见当健康状态异常时,将会停止并移除掉异常的容器并重新启动一个新的容器。
[root@swarm-node1 ~]# docker exec -it f7e1935f1c22 rm -f /usr/share/nginx/html/index.html[root@swarm-node1 ~]# dateWed Aug 16 16:48:41 CST 2017[root@swarm-node1 ~]# docker events --since "2017-08-16T16:48:35"2017-08-16T16:48:40.063995281+08:00 container exec_create: rm -f /usr/share/nginx/html/index.html f7e1935f1c2263112fe86a6e74c0d23a2ff369ffd54eab2781f2645a7dc7810a (com.docker.swarm.node.id=y83k6khc3vxmch1qd3j8kl4ak, com.docker.swarm.service.id=63c04khgjl033syhc5ef0e9g9, com.docker.swarm.service.name=nginx, com.docker.swarm.task=, com.docker.swarm.task.id=lkb6ags10aprqvzii5aht3pjf, com.docker.swarm.task.name=nginx.1.lkb6ags10aprqvzii5aht3pjf, image=registry.cn-hangzhou.aliyuncs.com/vnimos/nginx:v1@sha256:b223de06038b1187d1d1b955df759839712a10cde33d7f2784ef3f9f5573ad71, name=nginx.1.lkb6ags10aprqvzii5aht3pjf)...2017-08-16T16:49:57.889494869+08:00 container health_status: unhealthy f7e1935f1c2263112fe86a6e74c0d23a2ff369ffd54eab2781f2645a7dc7810a (com.docker.swarm.node.id=y83k6khc3vxmch1qd3j8kl4ak, com.docker.swarm.service.id=63c04khgjl033syhc5ef0e9g9, com.docker.swarm.service.name=nginx, com.docker.swarm.task=, com.docker.swarm.task.id=lkb6ags10aprqvzii5aht3pjf, com.docker.swarm.task.name=nginx.1.lkb6ags10aprqvzii5aht3pjf, image=registry.cn-hangzhou.aliyuncs.com/vnimos/nginx:v1@sha256:b223de06038b1187d1d1b955df759839712a10cde33d7f2784ef3f9f5573ad71, name=nginx.1.lkb6ags10aprqvzii5aht3pjf)2017-08-16T16:49:59.891503804+08:00 container kill f7e1935f1c2263112fe86a6e74c0d23a2ff369ffd54eab2781f2645a7dc7810a (com.docker.swarm.node.id=y83k6khc3vxmch1qd3j8kl4ak, com.docker.swarm.service.id=63c04khgjl033syhc5ef0e9g9, com.docker.swarm.service.name=nginx, com.docker.swarm.task=, com.docker.swarm.task.id=lkb6ags10aprqvzii5aht3pjf, com.docker.swarm.task.name=nginx.1.lkb6ags10aprqvzii5aht3pjf, image=registry.cn-hangzhou.aliyuncs.com/vnimos/nginx:v1@sha256:b223de06038b1187d1d1b955df759839712a10cde33d7f2784ef3f9f5573ad71, name=nginx.1.lkb6ags10aprqvzii5aht3pjf, signal=15)2017-08-16T16:49:59.964124883+08:00 container die f7e1935f1c2263112fe86a6e74c0d23a2ff369ffd54eab2781f2645a7dc7810a (com.docker.swarm.node.id=y83k6khc3vxmch1qd3j8kl4ak, com.docker.swarm.service.id=63c04khgjl033syhc5ef0e9g9, com.docker.swarm.service.name=nginx, com.docker.swarm.task=, com.docker.swarm.task.id=lkb6ags10aprqvzii5aht3pjf, com.docker.swarm.task.name=nginx.1.lkb6ags10aprqvzii5aht3pjf, exitCode=0, image=registry.cn-hangzhou.aliyuncs.com/vnimos/nginx:v1@sha256:b223de06038b1187d1d1b955df759839712a10cde33d7f2784ef3f9f5573ad71, name=nginx.1.lkb6ags10aprqvzii5aht3pjf)2017-08-16T16:50:00.289350308+08:00 network disconnect i6xug49nwdsxauqqpli3apvym (container=f7e1935f1c2263112fe86a6e74c0d23a2ff369ffd54eab2781f2645a7dc7810a, name=ingress, type=overlay)2017-08-16T16:50:00.289489879+08:00 network disconnect vxe1cwk14avlfp2xjgymhkhdl (container=f7e1935f1c2263112fe86a6e74c0d23a2ff369ffd54eab2781f2645a7dc7810a, name=my-network, type=overlay)2017-08-16T16:50:00.345105732+08:00 container stop f7e1935f1c2263112fe86a6e74c0d23a2ff369ffd54eab2781f2645a7dc7810a (com.docker.swarm.node.id=y83k6khc3vxmch1qd3j8kl4ak, com.docker.swarm.service.id=63c04khgjl033syhc5ef0e9g9, com.docker.swarm.service.name=nginx, com.docker.swarm.task=, com.docker.swarm.task.id=lkb6ags10aprqvzii5aht3pjf, com.docker.swarm.task.name=nginx.1.lkb6ags10aprqvzii5aht3pjf, image=registry.cn-hangzhou.aliyuncs.com/vnimos/nginx:v1@sha256:b223de06038b1187d1d1b955df759839712a10cde33d7f2784ef3f9f5573ad71, name=nginx.1.lkb6ags10aprqvzii5aht3pjf)2017-08-16T16:50:00.922761678+08:00 container create 2132a1bd9287bc377f0800d9a06e6876aaddb9a71b0afd567c3838fbb6aa3934 (com.docker.swarm.node.id=y83k6khc3vxmch1qd3j8kl4ak, com.docker.swarm.service.id=63c04khgjl033syhc5ef0e9g9, com.docker.swarm.service.name=nginx, com.docker.swarm.task=, com.docker.swarm.task.id=y00kqcu26sq75js3fvpqx4kt5, com.docker.swarm.task.name=nginx.1.y00kqcu26sq75js3fvpqx4kt5, image=registry.cn-hangzhou.aliyuncs.com/vnimos/nginx:v1@sha256:b223de06038b1187d1d1b955df759839712a10cde33d7f2784ef3f9f5573ad71, name=nginx.1.y00kqcu26sq75js3fvpqx4kt5)2017-08-16T16:50:03.006063329+08:00 network destroy vxe1cwk14avlfp2xjgymhkhdl (name=my-network, type=overlay)2017-08-16T16:50:03.376037876+08:00 container destroy 965a0ce53c2c0f2d5a740cb87c39ea51d164f1a6cf5bea0cf0679883dd99cb5c (com.docker.swarm.node.id=y83k6khc3vxmch1qd3j8kl4ak, com.docker.swarm.service.id=63c04khgjl033syhc5ef0e9g9, com.docker.swarm.service.name=nginx, com.docker.swarm.task=, com.docker.swarm.task.id=xign4i5kxc0mfp1pji7zzkoo1, com.docker.swarm.task.name=nginx.1.xign4i5kxc0mfp1pji7zzkoo1, image=registry.cn-hangzhou.aliyuncs.com/vnimos/nginx:v1@sha256:b223de06038b1187d1d1b955df759839712a10cde33d7f2784ef3f9f5573ad71, name=nginx.1.xign4i5kxc0mfp1pji7zzkoo1)2017-08-16T16:50:05.720425867+08:00 network connect i6xug49nwdsxauqqpli3apvym (container=2132a1bd9287bc377f0800d9a06e6876aaddb9a71b0afd567c3838fbb6aa3934, name=ingress, type=overlay)2017-08-16T16:50:05.808884815+08:00 network disconnect i6xug49nwdsxauqqpli3apvym (container=2132a1bd9287bc377f0800d9a06e6876aaddb9a71b0afd567c3838fbb6aa3934, name=ingress, type=overlay)2017-08-16T16:50:05.919636688+08:00 network create vxe1cwk14avlfp2xjgymhkhdl (name=my-network, type=overlay)2017-08-16T16:50:06.102359133+08:00 network connect i6xug49nwdsxauqqpli3apvym (container=2132a1bd9287bc377f0800d9a06e6876aaddb9a71b0afd567c3838fbb6aa3934, name=ingress, type=overlay)2017-08-16T16:50:06.453151382+08:00 network connect vxe1cwk14avlfp2xjgymhkhdl (container=2132a1bd9287bc377f0800d9a06e6876aaddb9a71b0afd567c3838fbb6aa3934, name=my-network, type=overlay)2017-08-16T16:50:07.062684099+08:00 container start 2132a1bd9287bc377f0800d9a06e6876aaddb9a71b0afd567c3838fbb6aa3934 (com.docker.swarm.node.id=y83k6khc3vxmch1qd3j8kl4ak, com.docker.swarm.service.id=63c04khgjl033syhc5ef0e9g9, com.docker.swarm.service.name=nginx, com.docker.swarm.task=, com.docker.swarm.task.id=y00kqcu26sq75js3fvpqx4kt5, com.docker.swarm.task.name=nginx.1.y00kqcu26sq75js3fvpqx4kt5, image=registry.cn-hangzhou.aliyuncs.com/vnimos/nginx:v1@sha256:b223de06038b1187d1d1b955df759839712a10cde33d7f2784ef3f9f5573ad71, name=nginx.1.y00kqcu26sq75js3fvpqx4kt5)2017-08-16T16:51:07.221879814+08:00 container exec_create: /bin/sh -c curl -f http://localhost/ || exit 1 2132a1bd9287bc377f0800d9a06e6876aaddb9a71b0afd567c3838fbb6aa3934 (com.docker.swarm.node.id=y83k6khc3vxmch1qd3j8kl4ak, com.docker.swarm.service.id=63c04khgjl033syhc5ef0e9g9, com.docker.swarm.service.name=nginx, com.docker.swarm.task=, com.docker.swarm.task.id=y00kqcu26sq75js3fvpqx4kt5, com.docker.swarm.task.name=nginx.1.y00kqcu26sq75js3fvpqx4kt5, image=registry.cn-hangzhou.aliyuncs.com/vnimos/nginx:v1@sha256:b223de06038b1187d1d1b955df759839712a10cde33d7f2784ef3f9f5573ad71, name=nginx.1.y00kqcu26sq75js3fvpqx4kt5)[root@swarm-node1 ~]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES2132a1bd9287 registry.cn-hangzhou.aliyuncs.com/vnimos/nginx:v1 "nginx -g 'daemon ..." 31 minutes ago Up 30 minutes (healthy) 80/tcp nginx.1.y00kqcu26sq75js3fvpqx4kt5
[root@swarm-manager ~]# docker node update --label-add project=nginx swarm-node2[root@swarm-manager ~]# docker node update --label-add "datacenter=xiamen" swarm-node1[root@swarm-manager ~]# docker node update --label-add "datacenter=fuzhou" swarm-node2[root@swarm-manager ~]# docker node inspect -f { {.Spec.Labels}} swarm-node1map[datacenter:xiamen][root@swarm-manager ~]# docker node inspect -f { {.Spec.Labels}} swarm-node2map[datacenter:fuzhou project:nginx]
[root@swarm-manager ~]# docker service create --replicas=4 --constraint 'node.hostname == swarm-node1' --name nginx-c1 nginx[root@swarm-manager ~]# docker service create --replicas=4 --constraint 'node.labels.project == nginx' --name nginx-c2 nginx[root@swarm-manager ~]# docker service ps nginx-c1ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTSsqcyg8wm8gdt nginx-c1.1 nginx:latest swarm-node1 Running Running 5 minutes agottst5umkpt6g nginx-c1.2 nginx:latest swarm-node1 Running Running 5 minutes agolpiz1vsaj6p3 nginx-c1.3 nginx:latest swarm-node1 Running Running 5 minutes agoykvrdyty4qie nginx-c1.4 nginx:latest swarm-node1 Running Running 5 minutes ago[root@swarm-manager ~]# docker service ps nginx-c2ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTSx322u16dfnyt nginx-c2.1 nginx:latest swarm-node2 Running Running 5 minutes agozjp93whpf4ah nginx-c2.2 nginx:latest swarm-node2 Running Running 5 minutes agoff3usxkpo5ae nginx-c2.3 nginx:latest swarm-node2 Running Running 5 minutes agop3g0haaqg6yu nginx-c2.4 nginx:latest swarm-node2 Running Running 5 minutes ago
[root@swarm-manager ~]# docker service create --replicas=6 --placement-pref 'spread=node.labels.datacenter' --name nginx-c3 nginx[root@swarm-manager ~]# docker service ps nginx-c3ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTSp3y7774kpu0w nginx-c3.1 nginx:latest swarm-node2 Running Running 3 minutes ago081l22wh87ok nginx-c3.2 nginx:latest swarm-node1 Running Running 3 minutes agolj1t30mok3te nginx-c3.3 nginx:latest swarm-node1 Running Running 3 minutes agofhb90j6brwuv nginx-c3.4 nginx:latest swarm-node2 Running Running 3 minutes agoein699law198 nginx-c3.5 nginx:latest swarm-node2 Running Running 3 minutes agovo91976o481m nginx-c3.6 nginx:latest swarm-node1 Running Running 3 minutes ago
Docker1.13推出了一个新版本的Docker Compose(V3)。该版本的主要特征是,允许Swarm Mode使用Docker Compose文件定义直接部署服务。
[root@swarm-manager ~]# cat docker-compose.yml version: '3'services: mysql: image: mysql environment: - MYSQL_ROOT_PASSWORD=password wordpress: image: wordpress ports: - 80:80 links: - mysql:mysql environment: - WORDPRESS_DB_PASSWORD=password
在Swarm Mode下,需要使用docker stack deploy
命令进行部署,如果直接使用docker-compose up则将会出现如下警告:
[root@swarm-manager ~]# docker-compose upWARNING: The Docker Engine you're using is running in swarm mode.Compose does not use swarm mode to deploy services to multiple nodes in a swarm. All containers will be scheduled on the current node.To deploy your application across the swarm, use `docker stack deploy`.
# docker stack deploy --compose-file=docker-compose.yml demo# docker stack ps demo5.1366.14# docker stack services demo11808011,如需转载请自行联系原作者