Docker學(xué)習(xí)筆記#5

一砂代、介紹

docker swarm是創(chuàng)建服務(wù)器集群的工具,只需要幾條命令就可以創(chuàng)建一個(gè)服務(wù)器集群布讹。它內(nèi)置一些服務(wù)器集群需要的工具琳拭,比如說:服務(wù)查找,網(wǎng)絡(luò)描验,負(fù)載均衡等等白嘁。

docker swarm
先初始化一個(gè)集群(docker swarm init)柿扣,然后讓服務(wù)器加入到這個(gè)集群里面(docker swarm join)澈灼,這樣就可以在這個(gè)集群服務(wù)器上面與創(chuàng)建服務(wù)(docker service create)盔夜,一個(gè)服務(wù)可以用一個(gè)或多容器來支持荠锭,容器之間會(huì)通過overlay網(wǎng)絡(luò)類型進(jìn)行通信。每一個(gè)服務(wù)器節(jié)點(diǎn)都知道這個(gè)集群里的其他服務(wù)器耕魄,如果某一個(gè)服務(wù)器節(jié)點(diǎn)出了問題黍析,docker會(huì)將出了問題的服務(wù)器上面運(yùn)行的容器,轉(zhuǎn)移到集群里的其他服務(wù)器上面屎开。我們不需要配置容器之間和服務(wù)器之間的負(fù)載均衡阐枣,因?yàn)樗莇ocker swarm內(nèi)置的功能。

二奄抽、集群

我在本地使用虛擬機(jī)創(chuàng)建了3個(gè)Linux系統(tǒng)的虛擬機(jī)蔼两,模擬三臺(tái)服務(wù)器(node1[192.168.33.10], node2[192.168.33.11], node3[192.168.33.12])。

nodes

1. 創(chuàng)建集群 - swarm init##

首先進(jìn)入到node1中逞度,初始化一個(gè)集群:

docker swarm init --advertise-addr 192.168.33.10:2377
swarm init

說明:192.168.33.10是node1的ip地址额划,--advertise-addr選項(xiàng)是設(shè)置監(jiān)聽的IP和端口號(hào)。執(zhí)行完档泽,看到提示「集群已經(jīng)初始完俊戳,當(dāng)前節(jié)點(diǎn)是管理員」表示初始化成功。后面還有添加woker節(jié)點(diǎn)的指示和命令馆匿。

docker swarm join \\
     --token SWMTKN-1-6cqcc65jtfmldojryxg7s4rpljekcdrobz288mycgyu12gfxlf-bg27cxk75qhbgwjngxn500lqg \\
     192.168.33.10:2377

初始化完抑胎,查看集群上節(jié)點(diǎn)的列表,可以執(zhí)行:

docker node ls
node ls

目前只有node1一個(gè)節(jié)點(diǎn)渐北,狀態(tài)為Ready阿逃,是個(gè)Leader。

2. 添加服務(wù)器到集群里 - swarm join##

接著登錄到node2中赃蛛,執(zhí)行初始化完成后返回的指令恃锉。

swarm join

這里會(huì)提示「這個(gè)節(jié)點(diǎn)已作為worker加入到集群中」,再登錄到node3呕臂,同樣的也把它加入到集群中破托。

swarm join

然后回到node1,查看集群的節(jié)點(diǎn)列表:

node ls

現(xiàn)在這個(gè)集群里一共有三個(gè)服務(wù)器歧蒋。node1為管理員土砂,node2,node3為worker疏尿。

3. 創(chuàng)建集群網(wǎng)絡(luò) - overlay##

在集群節(jié)點(diǎn)中運(yùn)行的容器需要一種overlay類型的網(wǎng)絡(luò)瘟芝,我們可以先去創(chuàng)建一個(gè)overlay網(wǎng)絡(luò),然后在創(chuàng)建服務(wù)的時(shí)候使用這個(gè)網(wǎng)絡(luò)褥琐。

docker network create --driver overlay skynet
network

可以看到新創(chuàng)建的網(wǎng)絡(luò)skynet锌俱,類型為overlay。

4. Swarm - 狀態(tài)的圖形界面##

為了更好的理解集群敌呈,我們可以創(chuàng)建一個(gè)visualizer贸宏,可以即時(shí)的查看集群中服務(wù)器的狀態(tài)和服務(wù)器上面運(yùn)行容器的狀態(tài)造寝。

登錄到manager node1上,執(zhí)行:

docker run -itd -p 5000:5000 -e HOST=192.168.33.10 -e PORT=5000 -v /var/run/docker.sock:/var/run/docker.sock manomarks/visualizer
visualizer

(這之前我已經(jīng)pull過manomarks/visualizer的鏡像)
打開瀏覽器吭练,訪問http://192.168.33.10:5000:

web ui

三诫龙、服務(wù)

1. 創(chuàng)建服務(wù) - service create##

創(chuàng)建好集群服務(wù)器以后就可以創(chuàng)建服務(wù)了,創(chuàng)建服務(wù)可以執(zhí)行:

docker service create --name web --network skynet --publish 3000:3000 --replicas 1 ninghao/node

創(chuàng)建一個(gè)名字叫web鲫咽,網(wǎng)絡(luò)使用剛剛創(chuàng)建的skynet签赃,使用--publish指定發(fā)布的端口號(hào),這里的3000:3000是ninghao/node鏡像里的nodejs應(yīng)用使用的端口號(hào)分尸,--replicas指定需要的數(shù)量锦聊。

接著查看一下服務(wù)的列表:

docker service ls

剛創(chuàng)建完成的服務(wù)web,REPLICASE的值為0/1箩绍,表示正處于prepare的狀態(tài)孔庭,還沒正式運(yùn)行。

查看服務(wù)的狀態(tài)可以執(zhí)行:

docker service ps web
service

等待狀態(tài)變?yōu)镽unning的時(shí)候材蛛,在瀏覽器打開http://192.168.33.10:5000 就可以查看到新增的服務(wù):

service

訪問http://192.168.33.10:3000 :

3000

2. 負(fù)載均衡 - load balancing##

現(xiàn)在我們已經(jīng)在集群里創(chuàng)建一個(gè)web服務(wù)圆到,服務(wù)現(xiàn)在只有一個(gè)容器,使用docker service ps web可以查看到容器在node1機(jī)器上面卑吭。上面我們通過訪問node1的ip:192.168.33.10:3000查看到頁面芽淡,那么嘗試訪問node2(192.168.33.11)和node3(192.168.33.12)的3000端口看看。

node2
node3

你會(huì)發(fā)現(xiàn)雖然在node2和node3上沒有容器運(yùn)行那個(gè)應(yīng)用陨簇,但還是可以打開頁面吐绵,觀察頁面顯示的Container ID是一樣的,可見頁面是同一個(gè)容器提供的服務(wù)河绽。這就docker里面的routing mesh技術(shù),而且還內(nèi)置了負(fù)載均衡的功能唉窃。如果訪問的服務(wù)器上沒有提供服務(wù)的容器耙饰,那docker會(huì)重定向到有這個(gè)服務(wù)容器的機(jī)器上面。

3. 擴(kuò)展服務(wù) - service scale##

scale up一下web服務(wù)纹份,現(xiàn)在這個(gè)服務(wù)只有一個(gè)容器苟跪,在node1上面執(zhí)行:

docker service scale web=6

web表示服務(wù)名稱,= 右邊表示容器的數(shù)量蔓涧,執(zhí)行完件已,回到瀏覽器查看,會(huì)陸陸續(xù)續(xù)出現(xiàn)其他的5個(gè)容器元暴,分別分布在3臺(tái)機(jī)器上

scale

重新訪問一下:http://192.168.33.10:3000 篷扩,留意Container ID會(huì)有變化,現(xiàn)在同時(shí)使用多個(gè)容器提供服務(wù):


scale可以增加容器茉盏,也可以減少容器鉴未。執(zhí)行:

docker service scale web=3
scale down

現(xiàn)在每臺(tái)服務(wù)器上都只有一個(gè)容器提供服務(wù)枢冤,總共3個(gè)容器。這是我們?cè)O(shè)置的web的狀態(tài)铜秆,docker會(huì)維護(hù)這個(gè)狀態(tài)淹真,現(xiàn)在我們關(guān)閉node3的機(jī)器:

halt
halt

node3關(guān)閉后,它上面的容器也不見了连茧,但過了一會(huì)核蘸,少了的容器,會(huì)出現(xiàn)在集群里其他機(jī)器上面啸驯。這里是跑到了node2上面:

halt

更新服務(wù) - service update
如果我們想要更新提供服務(wù)的容器中的一些信息值纱,比如:端口、數(shù)據(jù)卷坯汤、鏡像等等虐唠,可以使用:

docker service update [OPTIONS]

先scale up 到6個(gè),下面我們更新一下服務(wù)使用的鏡像:

docker service update web --image ninghao/node:hola

開始更新:

update

完成更新:

update

你會(huì)發(fā)現(xiàn)docker會(huì)使用我們指定的鏡像去逐個(gè)逐個(gè)更新(舊版本好像會(huì)一次全部停掉惰聂,再逐個(gè)更新)疆偿,新的容器創(chuàng)建好以后,我們?cè)偃g覽一下搓幌。

hola

已更新杆故,hello會(huì)變成hola。這個(gè)更新的動(dòng)作過程我們可以指定溉愁,比如說想一次更新兩個(gè)容器处铛,每次更新的時(shí)候中間停幾秒。這次換回原來的hello

docker service update web --image ninghao/node --update-parallelism 2 --update-delay 6s

--update-parallelism指定每次更新的容器數(shù)拐揭。
--update-delay指定容器更新的間隔撤蟆。

執(zhí)行的一開始會(huì)消失掉兩個(gè)容器,隨后更新完成兩個(gè)容器后堂污,會(huì)等待6秒家肯,然后再更新兩個(gè)。具體可以在http://192.168.33.10:5000 觀察完整過程盟猖。

update
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末讨衣,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子式镐,更是在濱河造成了極大的恐慌反镇,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,273評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件娘汞,死亡現(xiàn)場離奇詭異歹茶,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門辆亏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來风秤,“玉大人,你說我怎么就攤上這事扮叨$拖遥” “怎么了?”我有些...
    開封第一講書人閱讀 167,709評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵彻磁,是天一觀的道長碍沐。 經(jīng)常有香客問我,道長衷蜓,這世上最難降的妖魔是什么累提? 我笑而不...
    開封第一講書人閱讀 59,520評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮磁浇,結(jié)果婚禮上斋陪,老公的妹妹穿的比我還像新娘。我一直安慰自己置吓,他們只是感情好无虚,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,515評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著衍锚,像睡著了一般友题。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上戴质,一...
    開封第一講書人閱讀 52,158評(píng)論 1 308
  • 那天度宦,我揣著相機(jī)與錄音,去河邊找鬼告匠。 笑死戈抄,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的凫海。 我是一名探鬼主播呛凶,決...
    沈念sama閱讀 40,755評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼行贪!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起模闲,我...
    開封第一講書人閱讀 39,660評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤建瘫,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后尸折,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體啰脚,經(jīng)...
    沈念sama閱讀 46,203評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,287評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了橄浓。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片粒梦。...
    茶點(diǎn)故事閱讀 40,427評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖荸实,靈堂內(nèi)的尸體忽然破棺而出匀们,到底是詐尸還是另有隱情,我是刑警寧澤准给,帶...
    沈念sama閱讀 36,122評(píng)論 5 349
  • 正文 年R本政府宣布泄朴,位于F島的核電站,受9級(jí)特大地震影響露氮,放射性物質(zhì)發(fā)生泄漏祖灰。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,801評(píng)論 3 333
  • 文/蒙蒙 一畔规、第九天 我趴在偏房一處隱蔽的房頂上張望局扶。 院中可真熱鬧,春花似錦叁扫、人聲如沸三妈。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽沈跨。三九已至,卻和暖如春兔综,著一層夾襖步出監(jiān)牢的瞬間饿凛,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評(píng)論 1 272
  • 我被黑心中介騙來泰國打工软驰, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留涧窒,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,808評(píng)論 3 376
  • 正文 我出身青樓锭亏,卻偏偏與公主長得像纠吴,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子慧瘤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,440評(píng)論 2 359

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

  • 背景 憑借敏捷開發(fā)部署理念的推行戴已,相信對(duì)于很多人來說docker這項(xiàng)容器技術(shù)已經(jīng)并不陌生,Docker 1.12引...
    點(diǎn)融黑幫閱讀 3,238評(píng)論 3 14
  • 自從docker的出現(xiàn)锅减,web架構(gòu)方式也出現(xiàn)了新的變化糖儡。這幾年一直在關(guān)注docker,但是從未實(shí)踐過怔匣。最近有點(diǎn)時(shí)間...
    luax閱讀 10,248評(píng)論 10 39
  • 散場本就無可厚非握联,謝謝你珍惜我。我會(huì)努力尋找自己想要的。
    橙色苦瓜閱讀 113評(píng)論 0 0
  • 昨天夜里吃了三個(gè)酸豆角包子金闽,一大盤菜纯露,包括大塊的油炸豆腐和辣椒炒肉,一碗白粥代芜。吃完后我感到胃部很硬埠褪,像吞下了石頭,...
    楊知行閱讀 144評(píng)論 0 0
  • 最近接連發(fā)生兩起丟車事件,讓我深感禍不單行罚随。心情一度很低落玉工,能量很低。 首先是把自己上下班常用的電動(dòng)自行車丟了淘菩,是...
    鳳九覺察閱讀 279評(píng)論 0 1