从零开始学习docker(十七)Swarm mode ---service

上一节中,我们学习了如何搭建一个swarm集群。本节中,我们介绍如何操作service。

service,大家应该不陌生,我们在之前讲过。一个service就对应一个container容器。我们之前使用docker compose时,一个service时部署在一台机器上面的。但是我们在swarm下面,我们创建一个service时,他可能会运行在我们cluster中的任何一个节点中去,下面详细介绍。

docker service 命令

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。可以确保系统是有效稳定的。

docker service rm demo

可以删除demo.

vincent@swarm-manager:~$ docker service rm demo
demo

 

转载于:https://my.oschina.net/duanvincent/blog/3070353

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值