Docker入门六部曲——Swarm
原文鏈接:http://www.dubby.cn/detail.html?id=8738
準備工作
- 安裝Docker(版本最低1.13)。
- 安裝好Docker Compose,上一篇文章介紹過的。
- 安裝好Docker Machine,上一篇文章也提到了,Mac和Windows已經預先安裝了,但是Linux需要你自己安裝。如果是Windows10,那么請使用Docker Toolbox。
- 閱讀完Docker入門六部曲——基本引導。
- 閱讀完Docker入門六部曲——容器。
- 閱讀完Docker入門六部曲——服務。
- 確保你已經按照前幾篇所介紹的,把你的鏡像push到遠端倉庫了。
- 確保你的鏡像可以正常的部署。
- 按照Docker入門六部曲——服務介紹的,寫出了你的
docker-compose.yml文件。
介紹
Docker入門六部曲——服務我們已經足額會了定義服務,并且伸縮服務的容量。
這一篇,你可以看到如何把應用部署到集群中去,運行在多個機器上。Swarm可以幫助我們在多容器,多機器上部署服務。
理解Swarm集群
Swarm就是一個運行著Docker的集群。并且,你還可以使用Docker名來控制這個集群,但是你只能對swarm manager下達命令。集群中的機器可以是真實的物理機,也可以是虛擬機。加入swarm之后,他們都是一個節點。
Swarm manager可以使用不同的策略來運行容器,例如“最空節點”策略——選擇使用率最低的節點來運行容器;或者“全局”策略——每一個節點至少有一個鏡像的容器。你可以在Compose文件里指定策略。
Swarm manager就是在這個集群中,你可以執行命令,或者授權其他工作節點加入的那個管理節點。工作節點就是那些只提供資源,但不能授權其他節點加入集群的節點。
配置你的swarm
一個swarm集群由很多個機器組成,不管是虛擬機還是物理機都可以。最簡單的方式就是執行docker swarm init來開啟一個swarm節點,并且把當前執行命令的節點作為管理節點,然后在其他機器上執行docker swarm join來加入這個swarm集群。
本地虛擬機(Mac,Linux,Windows7,Windows8)
為了簡單,我們用虛擬機來完成swarm集群配置吧。你需要安裝VirtualBox。
然后使用docker-machine來創建幾個虛擬機:
$ docker-machine create --driver virtualbox myvm1
$ docker-machine create --driver virtualbox myvm2
?
這個需要下載鏡像,如果網絡不好,請耐心等待。
現在,你本地已經有了兩個虛擬機了,分別是myvm1和myvm2(可以使用docker-machine ls查看)。我們準備把myvm1作為管理節點,myvm2作為工作節點。
我們可以使用docker-machine ssh來登錄虛擬機或者發送命令。我們先把myvm1初始化成管理節點吧:
$ docker-machine ssh myvm1 "docker swarm init"
Swarm initialized: current node <node ID> is now a manager.To add a worker to this swarm, run the following command:docker swarm join \--token <token> \<ip>:<port>
?
執行失敗,提示要加
--advertise-addr?
使用docker-machine ls查看虛擬機,然后拷貝myvm1的ip,指定端口2377,例如:
docker-machine ssh myvm1 "docker swarm init --advertise-addr 192.168.99.100:2377"
初始化成功后,會返回一個提示信息,告訴你怎么加入這個集群。把這個命令拷貝下來,然后去myvm2執行:
$ docker-machine ssh myvm2 "docker swarm join \
--token <token> \
<ip>:<port>"This node joined a swarm as a worker.
?
注意:反斜線不能丟。
使用docker-machine ssh myvm1可以登錄到myvm1上,使用docker node ls可以查看當前swarm集群中的所有節點:
docker@myvm1:~$ docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
brtu9urxwfd5j0zrmkubhpkbd myvm2 Ready Active
rihwohkh3ph38fhillhhb84sk * myvm1 Ready Active Leader
?
執行exit退出登錄,返回原來的機器。當然也可以直接發送命令:
docker-machine ssh myvm1 "docker node ls"
?
部署應用
你一定沒有想到,最難的部分已經被你度過去了?,F在我們只需要重復上一篇文章的的步驟就可以了。不過要記住,我們只可以在myvm1上執行dokcer命令,因為他才是管理節點。
把之前的docker-compose.yml拷貝過來。使用docker-machine scp上傳到myvm1上:
docker-machine scp docker-compose.yml myvm1:~
?
我們要開始使用swarm來部署啦!同樣還是docker stack deploy:
docker-machine ssh myvm1 "docker stack deploy -c docker-compose.yml getstartedlab"
?
結束了!
我們來查看一下容器吧:
$ docker-machine ssh myvm1 "docker stack ps getstartedlab"ID NAME IMAGE NODE DESIRED STATE
jq2g3qp8nzwx test_web.1 username/repo:tag myvm1 Running
88wgshobzoxl test_web.2 username/repo:tag myvm2 Running
vbb1qbkb0o2z test_web.3 username/repo:tag myvm2 Running
ghii74p9budx test_web.4 username/repo:tag myvm1 Running
0prmarhavs87 test_web.5 username/repo:tag myvm2 Running
?
注意:DESIRED 和STATE,第一次執行命令部署時,需要從遠端倉庫下載鏡像,所以如果網絡不好的話,會過一段時間才會是Running。
訪問集群
你可以使用myvm1和myvm2任意一個ip來訪問這個集群。這個集群內部的網絡是共享的,而且是負載均衡的??梢允褂?code>docker-machine ls查看ip。然后在瀏覽器中打開,不斷的刷新,你會看到5個容器的id,因為是負載均衡的。
網絡示意圖:
伸縮應用
和上一篇文章的一樣,你只需要修改docker-compose.yml,然后重新執行docker stack deploy就可以了,swarm會自動幫你調整。
你也可以再創建幾個虛擬機,然后加入集群。再使用docker stack deploy重新部署,swarm就會把新的節點利用起來了。
清掃戰場
如果你想把應用給下掉:
docker-machine ssh myvm1 "docker stack rm getstartedlab"
?
如果想讓工作節點脫離swarm集群:
docker-machine ssh myvm2 "docker swarm leave"如果關閉管理節點:
docker-machine ssh myvm1 "docker swarm leave --force"
總結
以上是生活随笔為你收集整理的Docker入门六部曲——Swarm的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Docker入门六部曲——容器
- 下一篇: 如何在团队中做好Code Review