Docker 集群


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/

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM