準備3臺機器,包含一臺管理節點,兩臺工做節點的最小的swarm集羣html
172.16.0.200 Ubuntu14.04node
172.16.0.201 Ubuntu14.04nginx
172.16.0.202 Ubuntu14.04web
生成環境最好2n+1(n>=1)個manager節點,但也不是越多越好,官方建議是7個manager節點docker
在測試或開發環境中 Docker 官方爲了簡化安裝流程,提供了一套便捷的安裝腳本,Ubuntu 系統上可使用這套腳本安裝:npm
$ curl -fsSL get.docker.com -o get-docker.sh $ sudo sh get-docker.sh --mirror Aliyun
執行這個命令後,會下載腳本到get-docker.sh,並使用阿里雲的鏡像下載,而後腳本會把 Docker CE 的 Edge 版本安裝在系統中。且是默認啓動。ubuntu
或api
直接只有Daocloud的安裝腳本安裝瀏覽器
curl -sSL https://get.daocloud.io/docker | sh
service docker start
默認狀況下,docker 命令會使用 Unix socket 與 Docker 引擎通信。而只有 root 用戶和 docker 組的用戶才能夠訪問 Docker 引擎的 Unix socket。出於安全考慮,通常 Linux 系統上不會直接使用 root 用戶。所以,更好地作法是將須要使用 docker 的用戶加入 docker 用戶組。安全
創建docker組
groupadd docker
將當前用戶加入docker組
usermod -aG docker $USER
退出當前終端並從新登陸,進行以下測試。
$ docker run hello-world Unable to find image 'hello-world:latest' locally latest: Pulling from library/hello-world ca4f61b1923c: Pull complete Digest: sha256:be0cd392e45be79ffeffa6b05338b98ebb16c87b255f48e297ec7f98e123905c Status: Downloaded newer image for hello-world:latest Hello from Docker! This message shows that your installation appears to be working correctly. To generate this message, Docker took the following steps: 1. The Docker client contacted the Docker daemon. 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. (amd64) 3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading. 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal. To try something more ambitious, you can run an Ubuntu container with: $ docker run -it ubuntu bash Share images, automate workflows, and more with a free Docker ID: https://cloud.docker.com/ For more examples and ideas, visit: https://docs.docker.com/engine/userguide/
若能輸出以上信息,則是正確安裝
3臺機器見最上面,都安裝docker環境。如今以172.16.0.200爲manager,其他2臺爲worker
咱們使用 docker swarm init
在本機初始化一個 Swarm
集羣。
root@ubuntu:~# docker swarm init --advertise-addr 172.16.0.200 Swarm initialized: current node (u66elsqnr7cx3ufefopuvchbm) is now a manager. To add a worker to this swarm, run the following command: docker swarm join --token SWMTKN-1-1im8j7ggh1wqwxppvg3cl1mbpkzsnux4g4vgftg6s08dydl8xw-0iorbvp4rqvsqpe658i054xii 172.16.0.200:2377 To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
若是你的 Docker 主機有多個網卡,擁有多個 IP,必須使用 --advertise-addr
指定 IP。
執行 docker swarm init
命令的節點自動成爲管理節點。
登陸201
root@api:~# ssh 172.16.0.201 root@172.16.0.201's password: Welcome to Ubuntu 14.04 LTS (GNU/Linux 3.13.0-24-generic x86_64) Last login: Fri Dec 29 12:05:09 2017 from 172.16.0.200
加入到集羣
依照上面初始化集羣成功後的提示執行加入命令便可
root@ubuntu:~# docker swarm join --token SWMTKN-1-1im8j7ggh1wqwxppvg3cl1mbpkzsnux4g4vgftg6s08dydl8xw-0iorbvp4rqvsqpe658i054xii 172.16.0.200:2377 This node joined a swarm as a worker.
登陸202
root@api:~# ssh 172.16.0.202 root@172.16.0.202's password: Welcome to Ubuntu 14.04 LTS (GNU/Linux 3.13.0-24-generic x86_64) Last login: Fri Dec 29 12:05:09 2017 from 172.16.0.200
加入到集羣
root@ubuntu:~# docker swarm join --token SWMTKN-1-1im8j7ggh1wqwxppvg3cl1mbpkzsnux4g4vgftg6s08dydl8xw-0iorbvp4rqvsqpe658i054xii 172.16.0.200:2377 This node joined a swarm as a worker.
通過上邊的兩步,咱們已經擁有了一個最小的 Swarm
集羣,包含一個管理節點和兩個工做節點。
在管理節點使用 docker node ls
查看集羣。
root@ubuntu:~# docker node ls ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS c88xqfzcbhhlg6c07oochr2g7 ubuntu Ready Active rq5oh6hfdo32t9xbl7z7sgikm ubuntu Ready Active u66elsqnr7cx3ufefopuvchbm * ubuntu Ready Active Leader
退出集羣
root@ubuntu:~# docker swarm leave Node left the swarm.
兩臺都退出後,manager上查看
root@ubuntu:~# docker node ls ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS c88xqfzcbhhlg6c07oochr2g7 ubuntu Down Active rq5oh6hfdo32t9xbl7z7sgikm ubuntu Down Active u66elsqnr7cx3ufefopuvchbm * ubuntu Ready Active Leader
可見STATUS=Down了
上面可見有個token,那麼我忘記後面怎麼再加入新的worker節點或manager節點呢? 經過 docker swarm join-token worker查看,見下
root@ubuntu:~# docker swarm join-token worker To add a worker to this swarm, run the following command: docker swarm join --token SWMTKN-1-1im8j7ggh1wqwxppvg3cl1mbpkzsnux4g4vgftg6s08dydl8xw-0iorbvp4rqvsqpe658i054xii 172.16.0.200:2377
加入manager也同樣,換下參數
root@ubuntu:~# docker swarm join-token manager To add a manager to this swarm, run the following command: docker swarm join --token SWMTKN-1-1im8j7ggh1wqwxppvg3cl1mbpkzsnux4g4vgftg6s08dydl8xw-469wlqjh1jjuupv8ha29l2rzm 172.16.0.200:2377
也可更新 token
$ docker swarm join-token --rotate worker Succesfully rotated worker join token. To add a worker to this swarm, run the following command: docker swarm join \ --token SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-b30ljddcqhef9b9v4rs7mel7t \ 172.16.0.200:2377
使用–rotate更新token以後,只能用新的token來加入集羣。
-q或–quiet參數只打印token:
root@ubuntu:~# docker swarm join-token -q worker SWMTKN-1-1im8j7ggh1wqwxppvg3cl1mbpkzsnux4g4vgftg6s08dydl8xw-0iorbvp4rqvsqpe658i054xii
咱們使用 docker service
命令來管理 Swarm
集羣中的服務,該命令只能在管理節點運行。
管理節點執行
root@ubuntu:~# docker service create --name nginx --replicas 3 -p 80:80 nginx tqd95pxsro7o0rs33ylz9zimj overall progress: 3 out of 3 tasks 1/3: running [==================================================>] 2/3: running [==================================================>] 3/3: running [==================================================>] verify: Service converged
如今咱們使用瀏覽器,輸入任意節點 IP ,便可看到 nginx 默認頁面,如curl http://172.16.0.200
root@ubuntu:~# curl http://172.16.0.172 <!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> <style> body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } </style> </head> <body> <h1>Welcome to nginx!</h1> <p>If you see this page, the nginx web server is successfully installed and working. Further configuration is required.</p> <p>For online documentation and support please refer to <a href="http://nginx.org/">nginx.org</a>.<br/> Commercial support is available at <a href="http://nginx.com/">nginx.com</a>.</p> <p><em>Thank you for using nginx.</em></p> </body> </html>
到各臺機器查看,上面都已經起了docker 服務
root@worker2:~# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 08a92a22061b nginx:latest "nginx -g 'daemon of…" 33 seconds ago Up 33 seconds 80/tcp nginx.1.tfhtoyshmzun54x17l3l3sop5
使用 docker service ls
來查看當前 Swarm
集羣運行的服務。
root@ubuntu:~# docker service ls ID NAME MODE REPLICAS IMAGE PORTS tqd95pxsro7o nginx replicated 3/3 nginx:latest *:80->80/tcp
使用 docker service ps xxx
來查看某個服務的詳情,分佈在哪一個node等
root@manager1:~# docker service ps nginx ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS tfhtoyshmzun nginx.1 nginx:latest worker2 Running Running 18 minutes ago p6b1gfragl8y nginx.2 nginx:latest manager1 Running Running 16 minutes ago 250owqr51y50 nginx.3 nginx:latest worker1 Running Running 20 minutes ago
使用 docker service logs xxx
來查看某個服務的log,前面我訪問curl http://172.16.0.200 3次,log以下
root@manager1:~# docker service logs nginx nginx.2.p6b1gfragl8y@manager1 | 10.255.0.2 - - [02/Jan/2018:09:58:31 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.35.0" "-" nginx.1.tfhtoyshmzun@worker2 | 10.255.0.2 - - [02/Jan/2018:10:01:48 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.35.0" "-" nginx.3.250owqr51y50@worker1 | 10.255.0.2 - - [02/Jan/2018:10:05:12 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.35.0" "-"
上面nginx是service名稱,也可訪問具體服務中的某一個服務的log,logs後面按tab鍵,會彈出名稱. 我又訪問了3次,可見3臺上分別有2次訪問,可見其實現了負載均衡
root@manager1:~# docker service logs 250owqr51y50 nginx.3.250owqr51y50@worker1 | 10.255.0.2 - - [02/Jan/2018:10:05:12 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.35.0" "-" nginx.3.250owqr51y50@worker1 | 10.255.0.2 - - [02/Jan/2018:10:06:43 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.35.0" "-" root@manager1:~# docker service logs p6b1gfragl8y nginx.2.p6b1gfragl8y@manager1 | 10.255.0.2 - - [02/Jan/2018:09:58:31 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.35.0" "-" nginx.2.p6b1gfragl8y@manager1 | 10.255.0.2 - - [02/Jan/2018:10:06:36 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.35.0" "-" root@manager1:~# docker service logs tfhtoyshmzun nginx.1.tfhtoyshmzun@worker2 | 10.255.0.2 - - [02/Jan/2018:10:01:48 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.35.0" "-" nginx.1.tfhtoyshmzun@worker2 | 10.255.0.2 - - [02/Jan/2018:10:06:42 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.35.0" "-"
使用 docker service rm xxx
來從swarm集羣移除某個服務。
root@manager1:~# docker service rm nginx nginx
查看,已經無nginx的服務
root@manager1:~# docker service ls ID NAME MODE REPLICAS IMAGE PORTS
到worker節點上查看,也已經刪除了docker 服務
root@worker1:~# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
在swarm集羣中也可使用compose文件(docker-compose.yml)來配置,啓動多個服務,咱們以部署WordPress爲例進行說明
manager1節點上的 docker-compose.yml
version: "3" services: web: image: nginx deploy: replicas: 3 restart_policy: condition: on-failure resources: limits: cpus: "0.1" memory: 50M ports: - "80:80" networks: - webnet visualizer: image: dockersamples/visualizer:stable ports: - "8080:8080" volumes: - "/var/run/docker.sock:/var/run/docker.sock" deploy: placement: constraints: [node.role == manager] networks: - webnet networks: webnet:
這裏:
一、起了2個services:(web 和 visualizer)
二、web是3個nginx組成的。 visualizer是一個開源項目,可用一個圖來看到整個swarm上運行的容器,這裏指定了只能運行在manager節點上
三、起了一個網絡webnet,類型爲overlay,見最下面一行。啓動的容器都使用此網絡互聯
root@manager1:~# docker network ls NETWORK ID NAME DRIVER SCOPE 965de71420b3 bridge bridge local f66cd75a8741 docker_gwbridge bridge local 136fb30aa99c host host local 73ha87ntxcd5 ingress overlay swarm eebca5dc00a0 none null local pjxvmr7b1wcq proj_webnet overlay swarm
deploy 部署
-c 指定配置文件
proj 名稱隨便起
root@manager1:~# docker stack deploy -c docker-compose.yml proj Creating network proj_webnet Creating service proj_web Creating service proj_visualizer
部署完成之後,訪問http://任意節點:8080,即會看到監控界面
列出全部stack
root@manager1:~# docker stack ls NAME SERVICES proj 2
一個stack,2個services(web和visualizer)
列出全部服務services
root@manager1:~# docker stack services proj ID NAME MODE REPLICAS IMAGE PORTS 44u5poqrieoy proj_visualizer replicated 1/1 dockersamples/visualizer:stable *:8080->8080/tcp s2hlawvwwal4 proj_web replicated 3/3 nginx:latest *:80->80/tcp
列出stack中任務狀況,分佈狀況
root@manager1:~# docker stack ps proj ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS quexa31y9kkt proj_visualizer.1 dockersamples/visualizer:stable manager1 Running Running 20 minutes ago 4ozvbgpkrqtb proj_web.1 nginx:latest worker2 Running Running 21 minutes ago skkh5uzsyl9o proj_web.2 nginx:latest manager1 Running Running 21 minutes ago uns9r5vdx1x4 proj_web.3 nginx:latest worker1 Running Running 21 minutes ago
好比由3份變爲5份 docker service scale proj_web=5
root@manager1:~# docker service scale proj_web=5 proj_web 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
查看服務狀況
root@manager1:~# docker service ls ID NAME MODE REPLICAS IMAGE PORTS lhxiyrevf4dp proj_visualizer replicated 1/1 dockersamples/visualizer:stable *:8080->8080/tcp uxo0piooz4it proj_web replicated 5/5 nginx:latest *:80->80/tcp root@manager1:~# docker service ps proj_web ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS 6jqcnikrh39j proj_web.1 nginx:latest worker1 Running Running 4 minutes ago o7gq6w3wisbk proj_web.2 nginx:latest worker2 Running Running 4 minutes ago 15hzrtciynx7 proj_web.3 nginx:latest manager1 Running Running 4 minutes ago zjtcv1e68aag proj_web.4 nginx:latest worker1 Running Running 2 minutes ago 7mvta3g7m8fm proj_web.5 nginx:latest worker2 Running Running 2 minutes ago
減配置直接設置較少的數量便可,好比再設置回3個副本
root@manager1:~# docker service scale proj_web=3 proj_web scaled to 3 overall progress: 3 out of 3 tasks 1/3: running [==================================================>] 2/3: running [==================================================>] 3/3: running [==================================================>] verify: Service converged root@manager1:~# docker service ls ID NAME MODE REPLICAS IMAGE PORTS lhxiyrevf4dp proj_visualizer replicated 1/1 dockersamples/visualizer:stable *:8080->8080/tcp uxo0piooz4it proj_web replicated 3/3 nginx:latest *:80->80/tcp root@manager1:~# docker service ps proj_web ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS 15hzrtciynx7 proj_web.3 nginx:latest manager1 Running Running 6 minutes ago zjtcv1e68aag proj_web.4 nginx:latest worker1 Running Running 4 minutes ago 7mvta3g7m8fm proj_web.5 nginx:latest worker2 Running Running 4 minutes ago
docker stack rm xxx 移除服務
root@manager1:~# docker stack rm proj Removing service proj_visualizer Removing service proj_web Removing network proj_webnet
root@manager1:~# docker stack ls NAME SERVICES root@manager1:~# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
webnet的網絡也刪除了
root@worker2:~# docker network ls NETWORK ID NAME DRIVER SCOPE feff2a6d1503 bridge bridge local 2f0e401d10a6 docker_gwbridge bridge local 7a60d8ee6f8b host host local 73ha87ntxcd5 ingress overlay swarm 98442c4c5766 none null local
-----------------------
好比我在202上 stop 容器
root@worker2:~# docker stop 505 505
root@manager1:~# docker stack ps proj ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS quexa31y9kkt proj_visualizer.1 dockersamples/visualizer:stable manager1 Running Running 31 minutes ago 4ozvbgpkrqtb proj_web.1 nginx:latest worker2 Shutdown Complete 3 seconds ago skkh5uzsyl9o proj_web.2 nginx:latest manager1 Running Running 32 minutes ago uns9r5vdx1x4 proj_web.3 nginx:latest worker1 Running Running 32 minutes ago
可看到worker2 Shutdown
本覺得過會會新起個容器,可沒有
root@manager1:~# docker stack ps proj ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS quexa31y9kkt proj_visualizer.1 dockersamples/visualizer:stable manager1 Running Running 37 minutes ago 4ozvbgpkrqtb proj_web.1 nginx:latest worker2 Shutdown Complete 6 minutes ago skkh5uzsyl9o proj_web.2 nginx:latest manager1 Running Running 38 minutes ago uns9r5vdx1x4 proj_web.3 nginx:latest worker1 Running Running 38 minutes ago
本覺得再從新啓動202上的容器會恢復,可仍是沒有
root@worker2:~# docker start 505 505
root@manager1:~# docker stack ps proj ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS quexa31y9kkt proj_visualizer.1 dockersamples/visualizer:stable manager1 Running Running 40 minutes ago 4ozvbgpkrqtb proj_web.1 nginx:latest worker2 Shutdown Complete 8 minutes ago skkh5uzsyl9o proj_web.2 nginx:latest manager1 Running Running 41 minutes ago uns9r5vdx1x4 proj_web.3 nginx:latest worker1 Running Running 41 minutes ago
那麼刪除容器試試呢,仍是沒有--!
root@worker2:~# docker rm -f 505 505 root@worker2:~# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
root@manager1:~# docker stack ps proj ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS quexa31y9kkt proj_visualizer.1 dockersamples/visualizer:stable manager1 Running Running 1 hours ago 4ozvbgpkrqtb proj_web.1 nginx:latest worker2 Shutdown Complete 1 hours ago skkh5uzsyl9o proj_web.2 nginx:latest manager1 Running Running 1 hours ago uns9r5vdx1x4 proj_web.3 nginx:latest worker1 Running Running 1 hours ago
雖然服務掛了,可是訪問沒問題 curl http://172.16.0.202,見下
root@api:~# curl http://172.16.0.174 <!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> <style> body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } </style> </head> <body> <h1>Welcome to nginx!</h1> <p>If you see this page, the nginx web server is successfully installed and working. Further configuration is required.</p> <p>For online documentation and support please refer to <a href="http://nginx.org/">nginx.org</a>.<br/> Commercial support is available at <a href="http://nginx.com/">nginx.com</a>.</p> <p><em>Thank you for using nginx.</em></p> </body> </html>
幾經測試,發現kill掉的容器會立刻發現並重啓,見下:
kill 掉202上的容器
root@worker2:~# docker kill 2ff47 2ff47 root@worker2:~# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
發現副本又3個變爲2個
root@manager1:~# docker service ls ID NAME MODE REPLICAS IMAGE PORTS lhxiyrevf4dp proj_visualizer replicated 1/1 dockersamples/visualizer:stable *:8080->8080/tcp uxo0piooz4it proj_web replicated 2/3 nginx:latest *:80->80/tcp
但幾秒鐘後就新起了一個容器,3個副本就恢復了。 ps看的話仍是能看到Shutdown的那個容器
root@manager1:~# docker service ls ID NAME MODE REPLICAS IMAGE PORTS lhxiyrevf4dp proj_visualizer replicated 1/1 dockersamples/visualizer:stable *:8080->8080/tcp uxo0piooz4it proj_web replicated 3/3 nginx:latest *:80->80/tcp root@manager1:~# docker service ps proj_web ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS 15hzrtciynx7 proj_web.3 nginx:latest manager1 Running Running 9 minutes ago zjtcv1e68aag proj_web.4 nginx:latest worker1 Running Running 6 minutes ago gu528xwks2h8 proj_web.5 nginx:latest worker2 Running Running 22 seconds ago 7mvta3g7m8fm \_ proj_web.5 nginx:latest worker2 Shutdown Failed 28 seconds ago "task: non-zero exit (137)"
因而可知,docker stop停掉的容器可能認爲是人工的方式,人爲之,docker swarm集羣就再也不新起,這裏多是官方的bug
或
docker service update proj_web 也會使上面docker stop方式停掉的容器重啓
root@manager1:~# docker service update proj_web proj_web overall progress: 3 out of 3 tasks 1/3: running [==================================================>] 2/3: 3/3: running [==================================================>] verify: Service converged
而且刪掉了原各類緣由退出的容器,如下可見原 「7mvta3g7m8fm \_ proj_web.5 nginx:latest worker2 Shutdown Failed 5 minutes ago "task: non-zero exit (137)"」的容器沒了
root@manager1:~# docker service ps proj_web ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS r5ievoac5x3o proj_web.1 nginx:latest worker2 Running Running 11 seconds ago 15hzrtciynx7 proj_web.3 nginx:latest manager1 Running Running 16 minutes ago zjtcv1e68aag proj_web.4 nginx:latest worker1 Running Running 13 minutes ago
去202上看退出的容器也是沒了
root@worker2:~# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 69346c5e694e nginx:latest "nginx -g 'daemon of…" 2 minutes ago Up 2 minutes 80/tcp proj_web.1.r5ievoac5x3obvgelod00o9vw
又發現個問題,當嘗試用attach進入容器時,會一直hang住,手動斷開後,容器掛了
root@manager1:~# docker attach proj_web.3.15hzrtciynx72plzhjula2cd5 ^C root@manager1:~# root@manager1:~# docker service ls ID NAME MODE REPLICAS IMAGE PORTS lhxiyrevf4dp proj_visualizer replicated 1/1 dockersamples/visualizer:stable *:8080->8080/tcp uxo0piooz4it proj_web replicated 2/3 nginx:latest *:80->80/tcp root@manager1:~# docker stack ps proj ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS r5ievoac5x3o proj_web.1 nginx:latest worker2 Running Running 18 hours ago ige19sbe6zma proj_visualizer.1 dockersamples/visualizer:stable manager1 Running Running 19 hours ago 15hzrtciynx7 proj_web.3 nginx:latest manager1 Shutdown Complete 18 seconds ago zjtcv1e68aag proj_web.4 nginx:latest worker1 Running Running 19 hours ago
發現proj_web.3已經Shutdown了,並且集羣感知不到,不會重啓,就像前面的手動stop同樣
當docker service update時也會hang住,且沒有新起掛掉的容器
root@manager1:~# docker service update proj_web proj_web overall progress: 2 out of 3 tasks 1/3: 2/3: running [==================================================>] 3/3: running [==================================================>] ^C Operation continuing in background. Use `docker service ps proj_web` to check progress. root@manager1:~# docker service ps proj_web ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS r5ievoac5x3o proj_web.1 nginx:latest worker2 Running Running 19 hours ago 15hzrtciynx7 proj_web.3 nginx:latest manager1 Shutdown Complete 12 minutes ago zjtcv1e68aag proj_web.4 nginx:latest worker1 Running Running 19 hours ago
當docker service scale proj_web=3時也會hang住,只是新加的容器啓動了,那個死去的容器就是連不通,多是服務內部網絡的問題
root@manager1:~# docker service scale proj_web=4 proj_web scaled to 4 overall progress: 3 out of 4 tasks 1/4: running [==================================================>] 2/4: 3/4: running [==================================================>] 4/4: running [==================================================>]
考慮是容器網絡的問題,那麼把有問題的容器刪掉呢
root@manager1:~# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ecd4a8bebc9c nginx:latest "nginx -g 'daemon of…" About a minute ago Up About a minute 80/tcp proj_web.2.xwmvxfs23ijab0wessptod8d7 d58eb620e9aa nginx:latest "nginx -g 'daemon of…" 19 hours ago Exited (0) 21 minutes ago proj_web.3.15hzrtciynx72plzhjula2cd5 1879b088ca37 dockersamples/visualizer:stable "npm start" 19 hours ago Up 19 hours 8080/tcp proj_visualizer.1.ige19sbe6zma322oplynf7csp 5bc982461a41 dockersamples/visualizer:stable "npm start" 27 hours ago Exited (0) 19 hours ago proj_visualizer.1.quexa31y9kkt1m4a4pqcwskzt root@manager1:~# docker rm d58 d58 root@manager1:~# docker service update proj_web proj_web overall progress: 3 out of 4 tasks 1/4: 2/4: running [==================================================>] 3/4: running [==================================================>] 4/4: running [==================================================>] ^C Operation continuing in background. Use `docker service ps proj_web` to check progress. ##### 可見刪掉也仍是不行的,集羣服務裏仍是有4個副本,只是一個一直不通 root@manager1:~# docker rm 5bc 5bc root@manager1:~# docker service update proj_web proj_web overall progress: 3 out of 4 tasks 1/4: 2/4: running [==================================================>] 3/4: running [==================================================>] 4/4: running [==================================================>] ^C Operation continuing in background. Use `docker service ps proj_web` to check progress. root@manager1:~# docker service scale proj_web=3 proj_web scaled to 3 overall progress: 3 out of 3 tasks 1/3: running [==================================================>] 2/3: running [==================================================>] 3/3: running [==================================================>] verify: Service converged ##### 當重置爲3個副本時,就ok了。也就說明了是壞掉容器的網絡問題 root@manager1:~# docker service ps proj_web ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS r5ievoac5x3o proj_web.1 nginx:latest worker2 Running Running 19 hours ago xwmvxfs23ija proj_web.2 nginx:latest manager1 Running Running 4 minutes ago zjtcv1e68aag proj_web.4 nginx:latest worker1 Running Running 19 hours ago root@manager1:~#