从零开始学习docker(十七)Swarm mode ---service
擼了今年阿里、頭條和美團(tuán)的面試,我有一個(gè)重要發(fā)現(xiàn).......>>>
上一節(jié)中,我們學(xué)習(xí)了如何搭建一個(gè)swarm集群。本節(jié)中,我們介紹如何操作service。
service,大家應(yīng)該不陌生,我們?cè)谥爸v過(guò)。一個(gè)service就對(duì)應(yīng)一個(gè)container容器。我們之前使用docker compose時(shí),一個(gè)service時(shí)部署在一臺(tái)機(jī)器上面的。但是我們?cè)趕warm下面,我們創(chuàng)建一個(gè)service時(shí),他可能會(huì)運(yùn)行在我們cluster中的任何一個(gè)節(jié)點(diǎn)中去,下面詳細(xì)介紹。
docker service 命令
docker service create 有點(diǎn)像docker run
在swarm下面,我們不適用docker run命令來(lái)運(yùn)行容器。docker run表示在本地創(chuàng)建一個(gè)container。而service不一定運(yùn)行在本地。所以在swarm下,一般不用docker run。
?我們用創(chuàng)建一個(gè)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那么這個(gè)service運(yùn)行在哪個(gè)節(jié)點(diǎn)上呢?
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說(shuō)明運(yùn)行在swarm-worker-1。
MODE replicated表示這個(gè)service是可以水平擴(kuò)展的
如何擴(kuò)展?
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可以看到成功擴(kuò)展了5個(gè)service。5/5表示:分母表示這個(gè)service的scale是多少,分子表示有多少個(gè)已經(jīng)正常啟動(dòng)了。????
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可以看到有兩個(gè)service在swarm-worker-2節(jié)點(diǎn)上,有兩個(gè)service在swarm-manager節(jié)點(diǎn)上,有一個(gè)在swarm-worker-1節(jié)點(diǎn)上。
我們?nèi)warm-worker-1驗(yàn)證一下:
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有一個(gè)container。再去swarm-work-2驗(yàn)證一下:
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有兩個(gè)container。再去swarm-manager驗(yàn)證一下:
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有兩個(gè)container。
將service橫向擴(kuò)展5個(gè)以后,一切正常。
如果刪除容器,會(huì)怎么樣?
我們將swarm-worker-2中的一個(gè)容器刪掉:
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發(fā)現(xiàn)還是5個(gè)。但是這已經(jīng)不是之前的5個(gè)容器了。
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可以看到,我們?cè)趕warm-worker-2上的一個(gè)容器已經(jīng)shutdown了,但是在swarm-worker-1上重新啟動(dòng)了一個(gè)。因此swarm-worker-1上有兩個(gè)container。
因此,swarm不僅保證可以橫向擴(kuò)展,而且還保證一定數(shù)目的有效的。
當(dāng)swarm發(fā)現(xiàn)scale中的部分節(jié)點(diǎn)上的service失效,那么他會(huì)通過(guò)cluster的任一節(jié)點(diǎn)上重啟一個(gè),達(dá)到scale。可以確保系統(tǒng)是有效穩(wěn)定的。
docker service rm demo
可以刪除demo.
vincent@swarm-manager:~$ docker service rm demo demo?
總結(jié)
以上是生活随笔為你收集整理的从零开始学习docker(十七)Swarm mode ---service的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 从零开始学习docker(十六)Swar
- 下一篇: 从零开始学习docker(十八)Swar