從零開始學習docker(十七)Swarm mode ---service

上一節中,咱們學習瞭如何搭建一個swarm集羣。本節中,咱們介紹如何操做service。docker

service,你們應該不陌生,咱們在以前講過。一個service就對應一個container容器。咱們以前使用docker compose時,一個service時部署在一臺機器上面的。可是咱們在swarm下面,咱們建立一個service時,他可能會運行在咱們cluster中的任何一個節點中去,下面詳細介紹。學習

docker service 命令

docker service create 有點像docker runspa

在swarm下面,咱們不適用docker run命令來運行容器。docker run表示在本地建立一個container。而service不必定運行在本地。因此在swarm下,通常不用docker run。3d

 咱們用建立一個service:code

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運行在哪一個節點上呢?it

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。test

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
相關文章
相關標籤/搜索