这篇文章给大家介绍如何理解Swarm mode中的service,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:国际域名空间、虚拟主机、营销软件、网站建设、万州网站维护、网站推广。
我们介绍如何操作service。
service,大家应该不陌生,我们在之前讲过。一个service就对应一个container容器。我们之前使用docker compose时,一个service时部署在一台机器上面的。但是我们在swarm下面,我们创建一个service时,他可能会运行在我们cluster中的任何一个节点中去,下面详细介绍。
docker service create 有点像docker run
在swarm下面,我们不适用docker run命令来运行容器。docker run表示在本地创建一个container。而service不一定运行在本地。所以在swarm下,一般不用docker run。
我们用创建一个service:
vincent@swarm-manager:~$ docker service create --name demo busybox sh -c "while true; do sleep 3600;done" lf0wx1k2xz3l88mandyifkdm7 overall progress: 1 out of 1 tasks 1/1: running verify: Service converged
查看service情况:
vincent@swarm-manager:~$ docker service ls ID NAME MODE REPLICAS IMAGE PORTS lf0wx1k2xz3l demo replicated 1/1 busybox:latest
那么这个service运行在哪个节点上呢?
vincent@swarm-manager:~$ docker service ps demo ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS hkgsjp3dswfh demo.1 busybox:latest swarm-worker-1 Ready Ready 3 seconds ago
说明运行在swarm-worker-1。
MODE replicated表示这个service是可以水平扩展的
docker service scale demo=5
vincent@swarm-manager:~$ docker service scale demo=5 demo scaled to 5 overall progress: 5 out of 5 tasks 1/5: running 2/5: running 3/5: running 4/5: running 5/5: running verify: Service converged
vincent@swarm-manager:~$ docker service ls ID NAME MODE REPLICAS IMAGE PORTS lf0wx1k2xz3l demo replicated 5/5 busybox:latest
可以看到成功扩展了5个service。5/5表示:分母表示这个service的scale是多少,分子表示有多少个已经正常启动了。
vincent@swarm-manager:~$ docker service ps demo ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS kvngsxo8q1jv demo.1 busybox:latest swarm-worker-2 Running Running 3 minutes ago w9uw1zoncfki demo.2 busybox:latest swarm-worker-1 Running Running 2 minutes ago sxsro5dzepjc demo.3 busybox:latest swarm-manager Running Running 2 minutes ago klxhs3ec1j6c demo.4 busybox:latest swarm-manager Running Running 2 minutes ago yxov6fzvwsyr demo.5 busybox:latest swarm-worker-2 Running Running 2 minutes ago
可以看到有两个service在swarm-worker-2节点上,有两个service在swarm-manager节点上,有一个在swarm-worker-1节点上。
我们去swarm-worker-1验证一下:
vincent@swarm-worker-1:~$ docker container ls CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f1644c316b53 busybox:latest "sh -c 'while true; …" 3 minutes ago Up 3 minutes demo.2.w9uw1zoncfkikb1iayit9mdba
有一个container。再去swarm-work-2验证一下:
vincent@swarm-worker-2:~$ docker container ls CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a0607b0aa4ad busybox:latest "sh -c 'while true; …" 4 minutes ago Up 4 minutes demo.5.yxov6fzvwsyrfue8q1redjyx9 9ccc6696214e busybox:latest "sh -c 'while true; …" 6 minutes ago Up 6 minutes demo.1.kvngsxo8q1jvd5mv6k9lcvxf1
有两个container。再去swarm-manager验证一下:
vincent@swarm-manager:~$ docker container ls CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 128053167c33 busybox:latest "sh -c 'while true; …" 5 minutes ago Up 5 minutes demo.4.klxhs3ec1j6cek8914lk5mhdt dd1dca1864dc busybox:latest "sh -c 'while true; …" 5 minutes ago Up 5 minutes demo.3.sxsro5dzepjc0mgs1phzz12ro
有两个container。
将service横向扩展5个以后,一切正常。
我们将swarm-worker-2中的一个容器删掉:
vincent@swarm-worker-2:~$ docker rm -f 9ccc6696214e 9ccc6696214e
然后早swarm-maganger上查看:
vincent@swarm-manager:~$ docker service ls ID NAME MODE REPLICAS IMAGE PORTS lf0wx1k2xz3l demo replicated 5/5 busybox:latest
发现还是5个。但是这已经不是之前的5个容器了。
vincent@swarm-manager:~$ docker service ps demo ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS vq4lgu31i4bn demo.1 busybox:latest swarm-worker-1 Running Running 3 minutes ago kvngsxo8q1jv \_ demo.1 busybox:latest swarm-worker-2 Shutdown Failed 3 minutes ago "task: non-zero exit (137)" w9uw1zoncfki demo.2 busybox:latest swarm-worker-1 Running Running 10 minutes ago sxsro5dzepjc demo.3 busybox:latest swarm-manager Running Running 10 minutes ago klxhs3ec1j6c demo.4 busybox:latest swarm-manager Running Running 10 minutes ago yxov6fzvwsyr demo.5 busybox:latest swarm-worker-2 Running Running 10 minutes ago
可以看到,我们在swarm-worker-2上的一个容器已经shutdown了,但是在swarm-worker-1上重新启动了一个。因此swarm-worker-1上有两个container。
因此,swarm不仅保证可以横向扩展,而且还保证一定数目的有效的。
当swarm发现scale中的部分节点上的service失效,那么他会通过cluster的任一节点上重启一个,达到scale。可以确保系统是有效稳定的。
可以删除demo.
vincent@swarm-manager:~$ docker service rm demo demo
关于如何理解Swarm mode中的service就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。