本節(jié)我們將上一節(jié)中的應(yīng)用部署到服務(wù)器集群中。swarm使多個容器捌显、多個機(jī)器的應(yīng)用連接在一起成為可能茁彭。
Understand swarm cluster
A swarm is a group of machines that are running Docker and joined into a aluster.
組成集群的機(jī)器可以使真實的計算機(jī)也可以是虛擬機(jī),在形成集群后扶歪,我們會通過一個swarm manager來管理集群中的各個節(jié)點理肺。
swarm manager 可以不同的方式來運行容器,例如“emotiest node”--僅僅在其所需能力的最小范圍的規(guī)模的機(jī)器上運行特定的容器善镰,或者“global“妹萨,這種模式下會在集群的所有節(jié)點運行特定容器。用戶可以通過配置compose文件來修改運行策略炫欺。
swarm manager 是一個集群中僅有的能夠執(zhí)行命令的一個機(jī)器眠副,其余機(jī)器則僅僅提供運算資源。
當(dāng)我們在某個運行著容器的機(jī)器上對docker開啟swarm mode 時竣稽,該機(jī)器會被立即作為swarm manager囱怕,從此刻起,你在該機(jī)器上執(zhí)行的docker命令會在參與集群的所有機(jī)器上執(zhí)行毫别。
Set up your swarm
開啟swarm模式說簡單其實也簡單娃弓,就兩條命令:
- 開啟docker模式并設(shè)當(dāng)前機(jī)器為swarm manager
docker swarm init
- 添加其他機(jī)器作為該集群的節(jié)點
docker swarm join
下面以windows10為例,創(chuàng)建兩個虛擬機(jī)岛宦,并另其中一臺為manager台丛,另一臺為worker:
- 運行hyper-v manager
- 點擊右側(cè)的虛擬交換機(jī)
- 點擊創(chuàng)建虛擬交換機(jī),選擇外部
-將交換機(jī)命名為myswitch - 打開命令行工具,運行以下命令
docker-machine create -d hyperv --hyperv-virtual-switch "myswitch" myvm1
docker-machine create -d hyperv --hyperv-virtual-switch "myswitch" myvm2
- 查看創(chuàng)建的虛擬機(jī)
docker-machine ls
- 將shell上下文切換到某個虛擬機(jī)中
docker-machine env myvm1
##輸出結(jié)果最后會出現(xiàn)以下命令
# Run this command to configure your shell:
# & "C:\Program Files\Docker\Docker\Resources\bin\docker-machine.exe" env myvm1 | Invoke-Expression
執(zhí)行命令后shell上下文即為myvm1。
- 將myvm2添加為worker
docker swarm join --token <token> <ip>:2377
- 查看集群的節(jié)點列表
docker node ls
- 將shell環(huán)境切回本機(jī)
docker-machine env -u
#按照提示執(zhí)行命令
Deploy the app on the swarm manager
現(xiàn)在我們已經(jīng)搭好了一個小型的集群模型挽霉,接下來防嗡,我們將應(yīng)用從swarm manager上部署到集群中:
- 進(jìn)入swarm manager的shell環(huán)境下
- 保證當(dāng)前目錄下存放著上一節(jié)中的docker-compose.yml文件
- 運行命令:
docker stack deploy -c docker-compose.yml getstartedlab
- 查看應(yīng)用的運行情況
docker stack ps getstartedlab
-查看集群節(jié)點的IP地址
docker-machine ls
-
訪問任意一個節(jié)點,均能夠訪問到服務(wù)
訪問節(jié)點ip
由于docker swarm load balancer的強(qiáng)大功能侠坎,所有的節(jié)點均能訪問到任意其他節(jié)點的服務(wù)蚁趁,這意味著即使某個節(jié)點并沒有運行相關(guān)的服務(wù),仍然可以通過該節(jié)點從外部訪問实胸。
在開啟集群模式之前他嫡,應(yīng)將節(jié)點的一下端口打開
Port 7946 TCP/UDP for container network discovery.
Port 4789 UDP for the container ingress network.
停止集群工作
docker stack rm getstartedlab
#離開swarm模式
docker swarm leave
#切回本機(jī)環(huán)境
docker-machine env -u
#執(zhí)行輸出的命令即可
小結(jié)
docker-machine create --driver virtualbox myvm1 #Create a VM (Mac, Win7, Linux)
docker-machine create -d hyperv-virtual-switch "myswitch" myvm1 #Create a VM(windows10)
docker-machine env <machine-name>#查看機(jī)器信息
docker node ls #查看節(jié)點列表
docker-machine ls #查看機(jī)器列表
docker-machine start <machine-name> #啟動機(jī)器
docker stack deploy -c <file> <app>#部署應(yīng)用
docker-machine scp docker-compose.yml myvm1:~ #拷貝compose文件到節(jié)點機(jī)器上,僅當(dāng)使用ssh連接swarm manager機(jī)器時必須
docker stack rm <app name>#停止應(yīng)用
docker-machine stop <machine-name> #關(guān)閉節(jié)點機(jī)器
docker-machine rm #刪除機(jī)器