Docker集群的創(chuàng)建與管理

《Docker簡單入門》中編寫一個應(yīng)用程序呆奕,并將其轉(zhuǎn)化為服務(wù)梢杭,在《Docker分布式應(yīng)用》中儒旬,使應(yīng)用程序在生產(chǎn)過程中擴(kuò)展5倍栏账,并定義應(yīng)該如何運(yùn)行。現(xiàn)在將此應(yīng)用程序部署到集群上栈源,并在多臺機(jī)器上運(yùn)行它挡爵,通過將多臺機(jī)器連接到Dockerized集群上,使多容器甚垦、多機(jī)器應(yīng)用成為可能茶鹃。

網(wǎng)絡(luò)集群圖片

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

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

創(chuàng)建一個集群

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

接下來使用虛擬機(jī)快速創(chuàng)建一個集群俯邓,需要一個可以創(chuàng)建虛擬機(jī)(VMs)的虛擬機(jī)管理程序,在機(jī)器上安裝Oracle VirtualBox應(yīng)用程序熔号。如果是Windows 10系統(tǒng)稽鞭,而且安裝了Hyper-V,則無需安裝VirtualBox引镊,而應(yīng)該使用Hyper-V朦蕴。

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

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

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

$ docker-machine ls

第一臺機(jī)器將作為管理員,執(zhí)行管理命令赴恨,認(rèn)證工人加入群體疹娶,第二臺機(jī)器將成為工人÷琢可以使用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)中會包含一個預(yù)配置的docker swarm join命令除师,您可以在要添加的任何節(jié)點(diǎn)上運(yùn)行該命令沛膳。復(fù)制這個命令,并通過docker-machine ssh把它發(fā)送到名為myvm2的虛擬機(jī)汛聚,讓myvm2作為工人加入新的集群:

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

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

$ docker-machine ssh myvm1 "docker node ls"

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

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

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

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

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

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

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

$ docker-machine ls

現(xiàn)在可以使用myvm1的權(quán)限作為集群管理器,通過使用docker stack deploy命令和docker-compose.yml的本地副本來部署應(yīng)用程序烈菌。通過docker-machine命令配置連接到myvm1阵幸,仍然可以訪問本地主機(jī)上的文件,確保在docker-compose.yml文件同一個目錄下芽世,運(yùn)行以下命令在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ò)在它們之間共享并負(fù)載平衡。運(yùn)行docker-machine ls來獲取虛擬機(jī)的IP地址旺矾,并在瀏覽器中訪問其中的任何一個蔑鹦,或使用curl命令訪問。

使用各個的IP地址訪問

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

三節(jié)點(diǎn)集群的路由網(wǎng)絡(luò)

可以通過更改docker-compose.yml文件來縮放應(yīng)用程序,編輯代碼更改應(yīng)用程序的行為锅很,然后重新構(gòu)建其馏,然后推送新的鏡像,只需再次運(yùn)行docker stack deploy來部署這些更改爆安∨迅矗可以使用docker swarm join命令將任何物理或虛擬機(jī)器加入到此集群,并將容量添加到集群扔仓,之后只需運(yùn)行docker stack deploy部署褐奥,應(yīng)用將利用新的資源。

清理并重新啟動

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

$ docker stack rm getstartedlab

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

$ eval $(docker-machine env -u)

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

$ docker-machine ls

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

$ docker-machine start <machine-name>

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末袖裕,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子溉瓶,更是在濱河造成了極大的恐慌急鳄,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件堰酿,死亡現(xiàn)場離奇詭異疾宏,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)触创,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進(jìn)店門坎藐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人哼绑,你說我怎么就攤上這事岩馍。” “怎么了抖韩?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵蛀恩,是天一觀的道長。 經(jīng)常有香客問我茂浮,道長赦肋,這世上最難降的妖魔是什么块攒? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮佃乘,結(jié)果婚禮上囱井,老公的妹妹穿的比我還像新娘。我一直安慰自己趣避,他們只是感情好庞呕,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著程帕,像睡著了一般住练。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上愁拭,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天讲逛,我揣著相機(jī)與錄音,去河邊找鬼岭埠。 笑死盏混,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的惜论。 我是一名探鬼主播纸镊,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼季惯,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起鞠柄,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤漾稀,失蹤者是張志新(化名)和其女友劉穎躲庄,沒想到半個月后涧郊,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡沟于,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年咳胃,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片社裆。...
    茶點(diǎn)故事閱讀 38,569評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡拙绊,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出泳秀,到底是詐尸還是另有隱情标沪,我是刑警寧澤,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布嗜傅,位于F島的核電站金句,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏吕嘀。R本人自食惡果不足惜违寞,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一贞瞒、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧趁曼,春花似錦军浆、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至摄悯,卻和暖如春赞季,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背奢驯。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工申钩, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人瘪阁。 一個月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓撒遣,卻偏偏與公主長得像,于是被迫代替她去往敵國和親罗洗。 傳聞我的和親對象是個殘疾皇子愉舔,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,446評論 2 348

推薦閱讀更多精彩內(nèi)容