1. 理解swarm
swarm(譯:集群)
一個swarm是一組運行着Docker的機器,它們一起加入到一個集群。swarm中的機器既可以是物理機,也可以是虛擬機。在加入到一個swarm后,每台機器被稱為一個節點。以前,我們執行docker命令由對應的機器去執行,而現在多台機器組成swarm后,命令由swarm manager去執行。
swarm manager 可以用多種策略來運行容器,比如“empties node”,用容器填充利用率最低的機器;或者“global”,它確保每台機器只獲得指定容器的一個實例。
swarm manager 是在一個swarm中唯一能夠執行你的命令的機器,或者授權其它機器以workers身份加入。Workers僅僅只是在提供生產能力,它沒有權力告訴其他機器它能做什么和不能做什么。
到目前為止,你一直在本地機器上以single-host mode(單機模式)使用Docker。但是Docker也可以切換到swarm mode(群集模式),這就是啟用群集的原因。啟用群集模式將立即使當前機器成為swarm manager。從那時起,Docker將運行你所管理的swarm上執行的命令,而不僅僅是在當前機器上。
小結&回顧:
- swarm就是集群,是Docker集群,它是一組運行着Docker的機器組成的
- 組成Docker集群以后,集群中的每台機器被稱之為一個node,其中有一台機器是這個集群的管理者,稱之為manager,其余的稱之為worker
- 在集群中,你的命令都是由manager去執行的,這與你當前在那台機器上輸入的命令無關
- 與集群模式相對的是單機模式,之前我們一直是以單機模式使用Docker的
- 類比Redis機器的話,manager就相當於master,worker相當於slave
2. 設置swarm
集群由多個節點組成,可以是物理節點,也可以是虛擬節點。
運行docker swarm init以啟用群集模式,並且使當前的機器成為一個群集manager,然后在其它機器上運行docker swarm join,讓它們作為worker加入到群集中。
3. 創建集群
首先,我們需要hypervisor來創建虛擬機。官方支持的是VirtualBox,因此首先要安裝VirtualBox
https://www.virtualbox.org/wiki/Downloads
https://docs.docker.com/machine/drivers/
安裝完以后,使用 docker-machine 命令來創建兩個虛擬機
現在我們就有了兩個虛擬機,分別是myvm1和myvm2,接下來可以通過 docker-machine ls 命令查看
我們可能看到這樣的輸出
有了虛擬機以后,接下來初始化集群並添加節點
第一台啟動的機器是集群中的manager,它可以執行管理命令,並且授權其它的機器以worker身份加入到該集群中。
第二台啟動的機器是worker
通過 docker-machine ssh 命令,可以遠程登錄到剛才我們創建的虛擬機上,就像我們在Linux系統上使用ssh遠程登錄一樣
也就是說,通過 docker-machine ssh 我們可以與遠程虛擬機通訊
還可以對虛擬機進行啟動和停止操作
登錄到虛擬機以后就可以像在本機上那樣執行各種命令了,比如:
4. 部署應用到集群
前面我們也說過,只有集群中的manager才能執行命令,因此我們可以登錄到myvm1上創建一個docker-compose.yml文件
當然最簡單的是使用docker-machine scp命令從本地拷貝一個,比如:
語法格式如下:
現在,myvm1上有了docker-compose.yml文件,
於是,我們就可以在myvm1上執行 docker stack deploy -c docker-compose.yml getstartedlab 命令
應用已經部署到集群了,接下來我們可以訪問任意機器,簡單起見就不用瀏覽器訪問了,直接curl
看下集群中是如何負載均衡的,默認策略是隨機
查看一下stack,確實啟動了5個服務實例
5. 完整演示
6. 備忘單
7. 文檔
https://docs.docker.com/get-started/part4/
https://docs.docker.com/machine/reference/create/