在《docker簡單安裝與應用入門教程》中編寫乙個應用程式,並將其轉化為服務,在《docker分布式應用教程》中,使應用程式在生產過程中擴充套件5倍,並定義應該如何執行。現在將此應用程式部署到集群上,並在多台機器上執行它,通過將多台機器連線到dockerized集群上,使多容器、多機器應用成為可能。
swarm(集群)是執行docker並加入到乙個集群中的一組機器,在這種情況下,您將繼續執行以往的docker命令,但是現在它們將由swarm manager(集群管理器)在集群上執行。集群中的機器可以是物理的或虛擬的,加入集群後,它們被稱為nodes(節點)。集群管理器可以使用多種策略來執行容器,比如emptiest node(最空的節點),它使用容器填充最少使用的機器。或者global(全域性),它確保了每台機器只能得到指定容器的乙個例項。您可以指示集群管理器在組成檔案中使用這些策略,就像您已經使用的策略一樣。
集群管理器是集群中唯一可以執行命令的機器,或者授權其他機器作為workers(工人)加入集群。工人只是在那裡提供能力,並沒有權力告訴任何其他機器可以做什麼和不可以做什麼。到目前為止,您已經在本地機器上以單主機模式使用docker,但是docker也可以切換到集群模式,這就是使用集群的原因。當立即啟用集群模式使當前機器成為集群管理器時,docker將執行您正在管理的集群上執行的命令,而不僅僅是在當前的機器上。
建立乙個集群
乙個集群由多個節點組成,可以是物理機或虛擬機器,做法很簡單,執行docker swarm init來啟用集群模式,並讓你的當前機器成為集群管理器,然後在其他機器上執行docker swarm join讓它們作為工人加入集群。
接下來使用虛擬機器快速建立乙個集群,需要乙個可以建立虛擬機器(vms)的虛擬機器管理程式,在機程式設計客棧器上安裝oracle virtualbox 應用程式。如果是windows 10系統,而且安裝了hyper-v,則無需安裝virtualbox,而應該使用hyper-v。
現在,使用docker-machine建立幾個虛擬機器,使用virtualbox驅動程式:
$ docker-machine create --driver virtualbox myvm1
$ docker-machine create --driver virtualbox myvm2
您現在建立了兩個名為myvm1和myvm2的虛擬機器,使用下面命令列出機器並獲取其ip位址:
$ docker-machine ls
第一台機器將作為管理員,執行管理命令,認證工人加入群體,第二台機器將成為工人。可以使用docker-machine ssh將命令傳送到虛擬機器,執行docker swarm init使myvm1成為集群管理器:
$ docker-machine ssh myvm1 "docker swarm init --advertise-addr "
在執行docker swarm init後,響應中會包含乙個預配置的docker swarm join命令,您可以在要新增的任何節點上執行該命令。複製這個命令,並通過docker-machine ssh把它傳送到名為myvm2的虛擬機器,讓myvm2作為工人加入新的集群:
$ docker-machine ssh myvm2 "docker swarm join --token :2377"
將myvm2加入集群時,埠號要選擇2377,因為埠2376是docker守護程序埠,不要使用此埠,否則可能會遇到錯誤。在管理器上執行docker node ls以檢視集群中的節點:
$ docker-machine ssh myvm1 "docker node ls"
現在集群己經建立完成,如果想要刪除集群,可以使用docker swarm le**e在每個節點執行。
在集群上部署應用程式
現在只要重複《docker分布式應用教程》中使用的過程來部署新的集群,只要記住,只有像myvm1這樣的集群管理器才能執行docker命令,工人只是幹活的。
到目前為止,您已經在docker-machine ssh中包裝了docker命令來與虛擬機器進行通訊,另乙個選擇是執行docker-machine env 來獲取並執行乙個配置當前的命令,以便與虛擬機器上的docker守護程序通訊。這個方法更好,因為它允許使用本地docker-compose.yml檔案來「遠端」部署應用程式,而不需要將它複製到任何地方。
執行docker-machine env myvm1命令,複製輸出的最後一行提供的命令,然後貼上並執行該命令,以將終端配置為與集群管理器myvm1對話:
$ docker-machine env myvm1
$ eval $(docker-machine env myvm1)
執行docker-machine ls以驗證myvm1現在是活動的機器,即活動狀態旁邊有星號:
$ docker-machine ls
現在可以使用myvm1的許可權作為集群管理器,通過使用docker stack deploy命令和docker-compose.ym程式設計客棧l的本地副本來部署應用程式。通過docker-machine命令配置連線到myvm1,仍然可以訪問本地主機上的檔案,確保在docker-compose.yml檔案同乙個目錄下,執行以下命令在myvm1上部署應用程式:
$ docker stack deploy -c docker-compose.yml getstartedlab
就這樣,應用程式被部署在乙個集群上,現在,您可以使用docker命令看到服務和關聯的容器已經在myvm1和myvm2之間分配了:
$ docker stack ps getstartedlab
訪問集群
現在可以從myvm1或myvm2的ip位址訪問應用程式,網路在它們之間共享並負載平衡。執行docker-machine ls來獲取虛擬機器的ip位址,並在瀏覽器中訪問其中的任何乙個,或使用curl命令訪問。
您將看到五個不同的容器id,它們都是隨機迴圈的,展示了負載平衡。兩個ip位址工作的原因是集群中的節點參與入口路由網路,這可以確保部署在群集中某個埠的服務始程式設計客棧終將該埠保留給自己,而不管哪個節點實際上正在執行該容器。以下是三節點集群上埠8080上發布乙個名為my-web的服務的路由網路示意圖:
可以通過更改docker-compose.yml檔案來縮放應用程式,編輯**更改應用程式的行為,然後重新構建,然後推送新的映象,只需再次執行docker stack deploy來部署這些更改。可以使用docker swarm join命令將任何物理或虛擬機器加入到此集群,並將容量新增到集群,之後只需執行docker stack deploy部署,應用將利用新的資源。
清理並重新啟動
可以使用docker stack rm清理堆疊,例如:
$ docker stack rm getstartedlab
可以使用以下命令取消當前終端中的docker-machine環境變數:
$ eval $(docker-machine env -u)
這會將終端與docker-machine建立的虛擬機器斷開連線,並允許繼續在同一程式設計客棧個終端中工作。如果關閉本地主機,docker機器將停止執行,您可以通過執行docker-machine ls來檢查機器的狀態:
$ docker-machine ls
要重新啟動已停止的機器,可以執行:
$ docker-machine start
如果你想刪除這個集群,可以使用docker-machine ssh myvm2 "docker swarm le**e"命令,或者使用docker-machine ssh myvm1 "docker swarm le**e --force"強制刪除。
本文標題: docker集群的建立與管理例項詳解
本文位址: /jiqiao/fuwuqi/230801.html
docker建立zookeeper集群
在搭建一些基礎服務集群時,如果每台節點去配置需要花費大量的時間在集群配置上面,docker compose功能提供了一種編排能力,只需要寫docker compose.yml檔案就可以生成一套docker集群環境 docker pull zookeeper docker有三種網路模式,bridge ...
搭建集群,配置機器,建立集群,與python互動
總結 三個 件的配置區別在port pidfile cluster config file三項 redis server 7000.conf redis server 7001.conf redis server 7002.conf 檢視程序如下圖 總結 三個 件的配置區別在port pidfile...
容器 Docker 建立Redis5 集群
docker pull redisdocker images 檢視映象 mkdir opt module redis編寫redis cluster.tmpl 檔案 port requirepass wzth dev123 masterauth wzth dev123 protected mode n...