濮阳杆衣贸易有限公司

主頁(yè) > 知識(shí)庫(kù) > Docker集群的創(chuàng)建與管理實(shí)例詳解

Docker集群的創(chuàng)建與管理實(shí)例詳解

熱門(mén)標(biāo)簽:高德地圖標(biāo)注好做嗎 如何分析地圖標(biāo)注 新余高德地圖標(biāo)注怎么修改 電銷(xiāo)機(jī)器人怎么接線路 電銷(xiāo)機(jī)器人價(jià)值 外呼系統(tǒng)坐席費(fèi)計(jì)入會(huì)計(jì)哪個(gè)科目 大連400電話如何申請(qǐng) 達(dá)亞電銷(xiāo)機(jī)器人官網(wǎng) 撫順地圖標(biāo)注

本文詳細(xì)講述了Docker集群的創(chuàng)建與管理。分享給大家供大家參考,具體如下:

在《Docker簡(jiǎn)單安裝與應(yīng)用入門(mén)教程》中編寫(xiě)一個(gè)應(yīng)用程序,并將其轉(zhuǎn)化為服務(wù),在《Docker分布式應(yīng)用教程》中,使應(yīng)用程序在生產(chǎn)過(guò)程中擴(kuò)展5倍,并定義應(yīng)該如何運(yùn)行?,F(xiàn)在將此應(yīng)用程序部署到集群上,并在多臺(tái)機(jī)器上運(yùn)行它,通過(guò)將多臺(tái)機(jī)器連接到Dockerized集群上,使多容器、多機(jī)器應(yīng)用成為可能。

Swarm(集群)是運(yùn)行Docker并加入到一個(gè)集群中的一組機(jī)器,在這種情況下,您將繼續(xù)運(yùn)行以往的Docker命令,但是現(xiàn)在它們將由swarm manager(集群管理器)在集群上執(zhí)行。集群中的機(jī)器可以是物理的或虛擬的,加入集群后,它們被稱(chēng)為nodes(節(jié)點(diǎn))。集群管理器可以使用多種策略來(lái)運(yùn)行容器,比如emptiest node(最空的節(jié)點(diǎn)),它使用容器填充最少使用的機(jī)器。或者global(全局),它確保了每臺(tái)機(jī)器只能得到指定容器的一個(gè)實(shí)例。您可以指示集群管理器在組成文件中使用這些策略,就像您已經(jīng)使用的策略一樣。

集群管理器是集群中唯一可以執(zhí)行命令的機(jī)器,或者授權(quán)其他機(jī)器作為workers(工人)加入集群。工人只是在那里提供能力,并沒(méi)有權(quán)力告訴任何其他機(jī)器可以做什么和不可以做什么。到目前為止,您已經(jīng)在本地機(jī)器上以單主機(jī)模式使用Docker,但是Docker也可以切換到集群模式,這就是使用集群的原因。當(dāng)立即啟用集群模式使當(dāng)前機(jī)器成為集群管理器時(shí),Docker將運(yùn)行您正在管理的集群上執(zhí)行的命令,而不僅僅是在當(dāng)前的機(jī)器上。

創(chuàng)建一個(gè)集群

一個(gè)集群由多個(gè)節(jié)點(diǎn)組成,可以是物理機(jī)或虛擬機(jī),做法很簡(jiǎn)單,運(yùn)行docker swarm init來(lái)啟用集群模式,并讓你的當(dāng)前機(jī)器成為集群管理器,然后在其他機(jī)器上運(yùn)行docker swarm join讓它們作為工人加入集群。

接下來(lái)使用虛擬機(jī)快速創(chuàng)建一個(gè)集群,需要一個(gè)可以創(chuàng)建虛擬機(jī)(VMs)的虛擬機(jī)管理程序,在機(jī)器上安裝Oracle VirtualBox 應(yīng)用程序。如果是Windows 10系統(tǒng),而且安裝了Hyper-V,則無(wú)需安裝VirtualBox,而應(yīng)該使用Hyper-V。

現(xiàn)在,使用docker-machine創(chuàng)建幾個(gè)虛擬機(jī),使用VirtualBox驅(qū)動(dòng)程序:

$ docker-machine create --driver virtualbox myvm1
$ docker-machine create --driver virtualbox myvm2

您現(xiàn)在創(chuàng)建了兩個(gè)名為myvm1和myvm2的虛擬機(jī),使用下面命令列出機(jī)器并獲取其IP地址:

$ docker-machine ls

第一臺(tái)機(jī)器將作為管理員,執(zhí)行管理命令,認(rèn)證工人加入群體,第二臺(tái)機(jī)器將成為工人??梢允褂?code>docker-machine ssh將命令發(fā)送到虛擬機(jī),執(zhí)行docker swarm init使myvm1成為集群管理器:

$ docker-machine ssh myvm1 "docker swarm init --advertise-addr <myvm1的ip>"

在執(zhí)行docker swarm init后,響應(yīng)中會(huì)包含一個(gè)預(yù)配置的docker swarm join命令,您可以在要添加的任何節(jié)點(diǎn)上運(yùn)行該命令。復(fù)制這個(gè)命令,并通過(guò)docker-machine ssh把它發(fā)送到名為myvm2的虛擬機(jī),讓myvm2作為工人加入新的集群:

$ docker-machine ssh myvm2 "docker swarm join --token <token> <ip>:2377"

將myvm2加入集群時(shí),端口號(hào)要選擇2377,因?yàn)槎丝?376是Docker守護(hù)進(jìn)程端口,不要使用此端口,否則可能會(huì)遇到錯(cuò)誤。在管理器上運(yùn)行docker node ls以查看集群中的節(jié)點(diǎn):

$ docker-machine ssh myvm1 "docker node ls"

現(xiàn)在集群己經(jīng)創(chuàng)建完成,如果想要?jiǎng)h除集群,可以使用docker swarm leave在每個(gè)節(jié)點(diǎn)運(yùn)行。

在集群上部署應(yīng)用程序

現(xiàn)在只要重復(fù)《Docker分布式應(yīng)用教程》中使用的過(guò)程來(lái)部署新的集群,只要記住,只有像myvm1這樣的集群管理器才能執(zhí)行Docker命令,工人只是干活的。

到目前為止,您已經(jīng)在docker-machine ssh中包裝了Docker命令來(lái)與虛擬機(jī)進(jìn)行通信,另一個(gè)選擇是運(yùn)行docker-machine env <machine>來(lái)獲取并運(yùn)行一個(gè)配置當(dāng)前的命令,以便與虛擬機(jī)上的Docker守護(hù)進(jìn)程通信。這個(gè)方法更好,因?yàn)樗试S使用本地docker-compose.yml文件來(lái)“遠(yuǎn)程”部署應(yīng)用程序,而不需要將它復(fù)制到任何地方。

執(zhí)行docker-machine env myvm1命令,復(fù)制輸出的最后一行提供的命令,然后粘貼并運(yùn)行該命令,以將終端配置為與集群管理器myvm1對(duì)話:

$ docker-machine env myvm1
$ eval $(docker-machine env myvm1)

運(yùn)行docker-machine ls以驗(yàn)證myvm1現(xiàn)在是活動(dòng)的機(jī)器,即活動(dòng)狀態(tài)旁邊有星號(hào):

$ docker-machine ls

現(xiàn)在可以使用myvm1的權(quán)限作為集群管理器,通過(guò)使用docker stack deploy命令和docker-compose.yml的本地副本來(lái)部署應(yīng)用程序。通過(guò)docker-machine命令配置連接到myvm1,仍然可以訪問(wèn)本地主機(jī)上的文件,確保在docker-compose.yml文件同一個(gè)目錄下,運(yùn)行以下命令在myvm1上部署應(yīng)用程序:

$ docker stack deploy -c docker-compose.yml getstartedlab

就這樣,應(yīng)用程序被部署在一個(gè)集群上,現(xiàn)在,您可以使用Docker命令看到服務(wù)和關(guān)聯(lián)的容器已經(jīng)在myvm1和myvm2之間分配了:

$ docker stack ps getstartedlab

訪問(wèn)集群

現(xiàn)在可以從myvm1或myvm2的IP地址訪問(wèn)應(yīng)用程序,網(wǎng)絡(luò)在它們之間共享并負(fù)載平衡。運(yùn)行docker-machine ls來(lái)獲取虛擬機(jī)的IP地址,并在瀏覽器中訪問(wèn)其中的任何一個(gè),或使用curl命令訪問(wèn)。

您將看到五個(gè)不同的容器ID,它們都是隨機(jī)循環(huán)的,展示了負(fù)載平衡。兩個(gè)IP地址工作的原因是集群中的節(jié)點(diǎn)參與入口路由網(wǎng)絡(luò),這可以確保部署在群集中某個(gè)端口的服務(wù)始終將該端口保留給自己,而不管哪個(gè)節(jié)點(diǎn)實(shí)際上正在運(yùn)行該容器。以下是三節(jié)點(diǎn)集群上端口8080上發(fā)布一個(gè)名為my-web的服務(wù)的路由網(wǎng)絡(luò)示意圖:

可以通過(guò)更改docker-compose.yml文件來(lái)縮放應(yīng)用程序,編輯代碼更改應(yīng)用程序的行為,然后重新構(gòu)建,然后推送新的鏡像,只需再次運(yùn)行docker stack deploy來(lái)部署這些更改??梢允褂?code>docker swarm join命令將任何物理或虛擬機(jī)器加入到此集群,并將容量添加到集群,之后只需運(yùn)行docker stack deploy部署,應(yīng)用將利用新的資源。

清理并重新啟動(dòng)

可以使用docker stack rm清理堆棧,例如:

$ docker stack rm getstartedlab

可以使用以下命令取消當(dāng)前終端中的docker-machine環(huán)境變量:

$ eval $(docker-machine env -u)

這會(huì)將終端與docker-machine創(chuàng)建的虛擬機(jī)斷開(kāi)連接,并允許繼續(xù)在同一個(gè)終端中工作。如果關(guān)閉本地主機(jī),Docker機(jī)器將停止運(yùn)行,您可以通過(guò)運(yùn)行docker-machine ls來(lái)檢查機(jī)器的狀態(tài):

$ docker-machine ls

要重新啟動(dòng)已停止的機(jī)器,可以運(yùn)行:

$ docker-machine start <machine-name>

如果你想刪除這個(gè)集群,可以使用docker-machine ssh myvm2 "docker swarm leave"命令,或者使用docker-machine ssh myvm1 "docker swarm leave --force"強(qiáng)制刪除。

希望本文所述對(duì)大家docker容器的使用有所幫

標(biāo)簽:衡水 新鄉(xiāng) 南通 楊凌 湖南 遼源 黃石 海東

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Docker集群的創(chuàng)建與管理實(shí)例詳解》,本文關(guān)鍵詞  Docker,集群,的,創(chuàng)建,與,管理,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Docker集群的創(chuàng)建與管理實(shí)例詳解》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于Docker集群的創(chuàng)建與管理實(shí)例詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    五华县| 梅州市| 镇远县| 准格尔旗| 宁德市| 建平县| 阜平县| 定边县| 荔浦县| 津市市| 祁门县| 深泽县| 邵武市| 楚雄市| 田林县| 白水县| 中方县| 嵊泗县| 穆棱市| 普陀区| 武宣县| 滁州市| 哈尔滨市| 中宁县| 鄂伦春自治旗| 京山县| 门头沟区| 衢州市| 湖口县| 武强县| 常山县| 平谷区| 东海县| 汾阳市| 紫云| 民丰县| 朝阳县| 洛南县| 鲁甸县| 积石山| 锡林郭勒盟|