Docker集群的創(chuàng)建與管理實例詳解
本文詳細講述了Docker集群的創(chuàng)建與管理。分享給大家供大家參考,具體如下:
在《Docker簡單安裝與應(yīng)用入門教程》中編寫一個應(yīng)用程序,并將其轉(zhuǎn)化為服務(wù),在《Docker分布式應(yīng)用教程》中,使應(yīng)用程序在生產(chǎn)過程中擴展5倍,并定義應(yīng)該如何運行?,F(xiàn)在將此應(yīng)用程序部署到集群上,并在多臺機器上運行它,通過將多臺機器連接到Dockerized集群上,使多容器、多機器應(yīng)用成為可能。
Swarm(集群)是運行Docker并加入到一個集群中的一組機器,在這種情況下,您將繼續(xù)運行以往的Docker命令,但是現(xiàn)在它們將由swarm manager(集群管理器)在集群上執(zhí)行。集群中的機器可以是物理的或虛擬的,加入集群后,它們被稱為nodes(節(jié)點)。集群管理器可以使用多種策略來運行容器,比如emptiest node(最空的節(jié)點),它使用容器填充最少使用的機器。或者global(全局),它確保了每臺機器只能得到指定容器的一個實例。您可以指示集群管理器在組成文件中使用這些策略,就像您已經(jīng)使用的策略一樣。
集群管理器是集群中唯一可以執(zhí)行命令的機器,或者授權(quán)其他機器作為workers(工人)加入集群。工人只是在那里提供能力,并沒有權(quán)力告訴任何其他機器可以做什么和不可以做什么。到目前為止,您已經(jīng)在本地機器上以單主機模式使用Docker,但是Docker也可以切換到集群模式,這就是使用集群的原因。當立即啟用集群模式使當前機器成為集群管理器時,Docker將運行您正在管理的集群上執(zhí)行的命令,而不僅僅是在當前的機器上。
創(chuàng)建一個集群
一個集群由多個節(jié)點組成,可以是物理機或虛擬機,做法很簡單,運行docker swarm init
來啟用集群模式,并讓你的當前機器成為集群管理器,然后在其他機器上運行docker swarm join
讓它們作為工人加入集群。
接下來使用虛擬機快速創(chuàng)建一個集群,需要一個可以創(chuàng)建虛擬機(VMs)的虛擬機管理程序,在機器上安裝Oracle VirtualBox 應(yīng)用程序。如果是Windows 10系統(tǒng),而且安裝了Hyper-V,則無需安裝VirtualBox,而應(yīng)該使用Hyper-V。
現(xiàn)在,使用docker-machine
創(chuàng)建幾個虛擬機,使用VirtualBox驅(qū)動程序:
$ docker-machine create --driver virtualbox myvm1 $ docker-machine create --driver virtualbox myvm2
您現(xiàn)在創(chuàng)建了兩個名為myvm1和myvm2的虛擬機,使用下面命令列出機器并獲取其IP地址:
$ docker-machine ls
第一臺機器將作為管理員,執(zhí)行管理命令,認證工人加入群體,第二臺機器將成為工人。可以使用docker-machine ssh
將命令發(fā)送到虛擬機,執(zhí)行docker swarm init
使myvm1成為集群管理器:
$ docker-machine ssh myvm1 "docker swarm init --advertise-addr <myvm1的ip>"
在執(zhí)行docker swarm init
后,響應(yīng)中會包含一個預配置的docker swarm join
命令,您可以在要添加的任何節(jié)點上運行該命令。復制這個命令,并通過docker-machine ssh
把它發(fā)送到名為myvm2的虛擬機,讓myvm2作為工人加入新的集群:
$ docker-machine ssh myvm2 "docker swarm join --token <token> <ip>:2377"
將myvm2加入集群時,端口號要選擇2377,因為端口2376是Docker守護進程端口,不要使用此端口,否則可能會遇到錯誤。在管理器上運行docker node ls
以查看集群中的節(jié)點:
$ docker-machine ssh myvm1 "docker node ls"
現(xiàn)在集群己經(jīng)創(chuàng)建完成,如果想要刪除集群,可以使用docker swarm leave在每個節(jié)點運行。
在集群上部署應(yīng)用程序
現(xiàn)在只要重復《Docker分布式應(yīng)用教程》中使用的過程來部署新的集群,只要記住,只有像myvm1這樣的集群管理器才能執(zhí)行Docker命令,工人只是干活的。
到目前為止,您已經(jīng)在docker-machine ssh
中包裝了Docker命令來與虛擬機進行通信,另一個選擇是運行docker-machine env <machine>
來獲取并運行一個配置當前的命令,以便與虛擬機上的Docker守護進程通信。這個方法更好,因為它允許使用本地docker-compose.yml文件來“遠程”部署應(yīng)用程序,而不需要將它復制到任何地方。
執(zhí)行docker-machine env myvm1
命令,復制輸出的最后一行提供的命令,然后粘貼并運行該命令,以將終端配置為與集群管理器myvm1對話:
$ docker-machine env myvm1 $ eval $(docker-machine env myvm1)
運行docker-machine ls
以驗證myvm1現(xiàn)在是活動的機器,即活動狀態(tài)旁邊有星號:
$ docker-machine ls
現(xiàn)在可以使用myvm1的權(quán)限作為集群管理器,通過使用docker stack deploy
命令和docker-compose.yml的本地副本來部署應(yīng)用程序。通過docker-machine
命令配置連接到myvm1,仍然可以訪問本地主機上的文件,確保在docker-compose.yml文件同一個目錄下,運行以下命令在myvm1上部署應(yīng)用程序:
$ docker stack deploy -c docker-compose.yml getstartedlab
就這樣,應(yīng)用程序被部署在一個集群上,現(xiàn)在,您可以使用Docker命令看到服務(wù)和關(guān)聯(lián)的容器已經(jīng)在myvm1和myvm2之間分配了:
$ docker stack ps getstartedlab
訪問集群
現(xiàn)在可以從myvm1或myvm2的IP地址訪問應(yīng)用程序,網(wǎng)絡(luò)在它們之間共享并負載平衡。運行docker-machine ls
來獲取虛擬機的IP地址,并在瀏覽器中訪問其中的任何一個,或使用curl命令訪問。
您將看到五個不同的容器ID,它們都是隨機循環(huán)的,展示了負載平衡。兩個IP地址工作的原因是集群中的節(jié)點參與入口路由網(wǎng)絡(luò),這可以確保部署在群集中某個端口的服務(wù)始終將該端口保留給自己,而不管哪個節(jié)點實際上正在運行該容器。以下是三節(jié)點集群上端口8080上發(fā)布一個名為my-web的服務(wù)的路由網(wǎng)絡(luò)示意圖:
可以通過更改docker-compose.yml文件來縮放應(yīng)用程序,編輯代碼更改應(yīng)用程序的行為,然后重新構(gòu)建,然后推送新的鏡像,只需再次運行docker stack deploy
來部署這些更改??梢允褂?code>docker swarm join命令將任何物理或虛擬機器加入到此集群,并將容量添加到集群,之后只需運行docker stack deploy
部署,應(yīng)用將利用新的資源。
清理并重新啟動
可以使用docker stack rm
清理堆棧,例如:
$ docker stack rm getstartedlab
可以使用以下命令取消當前終端中的docker-machine環(huán)境變量:
$ eval $(docker-machine env -u)
這會將終端與docker-machine
創(chuàng)建的虛擬機斷開連接,并允許繼續(xù)在同一個終端中工作。如果關(guān)閉本地主機,Docker機器將停止運行,您可以通過運行docker-machine ls
來檢查機器的狀態(tài):
$ docker-machine ls
要重新啟動已停止的機器,可以運行:
$ docker-machine start <machine-name>
如果你想刪除這個集群,可以使用docker-machine ssh myvm2 "docker swarm leave"
命令,或者使用docker-machine ssh myvm1 "docker swarm leave --force"
強制刪除。
希望本文所述對大家docker容器的使用有所幫
相關(guān)文章
docker搭建devops(騰訊云輕量應(yīng)用服務(wù)器)教程
這篇文章主要為大家介紹了docker搭建devops(騰訊云輕量應(yīng)用服務(wù)器)教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-11-11如何Docker化Python Django應(yīng)用程序
今天小編就為大家分享一篇關(guān)于如何Docker化Python Django應(yīng)用程序的文章,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2018-09-09docker創(chuàng)建鏡像并上傳云端服務(wù)器的實現(xiàn)示例
鏡像是一種輕量級、可執(zhí)行的獨立軟件包,用來打包軟件運行環(huán)境和基于運行環(huán)境開發(fā)的軟件,本文介紹了如何使用Docker創(chuàng)建鏡像,并將其上傳到云端,感興趣的可以了解一下2023-08-08Docker開放2375端口實現(xiàn)遠程訪問的操作方法
因為IDEA集成docker環(huán)境,實質(zhì)上是通過遠程訪問的形式,進行連接,因此需要開啟Docker的2375端口的遠程訪問權(quán)限,這篇文章主要介紹了Docker開放2375端口實現(xiàn)遠程訪問的操作方法,需要的朋友可以參考下2024-05-05Docker容器內(nèi)應(yīng)用服務(wù)自啟動的方法示例
這篇文章主要介紹了Docker容器內(nèi)應(yīng)用服務(wù)自啟動的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-09-09docker-compose網(wǎng)絡(luò)設(shè)置之networks的使用
本文詳細解釋了在使用 Docker Compose時如何配置網(wǎng)絡(luò),包括創(chuàng)建、使用和問題解決等方面,介紹了如何通過docker-compose.yml文件快速編排和部署應(yīng)用服務(wù),同時解決網(wǎng)絡(luò)隔離問題,感興趣的可以了解一下2024-10-10