Docker是開(kāi)源的應(yīng)用容器引擎劣砍,能很好地支持DevOps中相當(dāng)重要的云計(jì)算对粪,為了搭建完整的應(yīng)用級(jí)別的Docker環(huán)境仿吞,我們一起開(kāi)始探索吧。
本篇知識(shí)點(diǎn)如下淳地,將分為三部分來(lái)介紹:
Docker Swarm(本篇)
先來(lái)看兩張圖
Docker Swarm是用于創(chuàng)建Docker主機(jī)(運(yùn)行Docker守護(hù)進(jìn)程的服務(wù)器)集群的工具怖糊,使用Swarm操作集群,會(huì)使用戶(hù)感覺(jué)就像是在一臺(tái)主機(jī)上進(jìn)行操作颇象。
在我們演示之前伍伤,請(qǐng)準(zhǔn)備:至少2臺(tái)可以互相聯(lián)網(wǎng)的機(jī)器,并安裝好Docker 1.12或以上版本夯到。
1 初始化 Swarm
在一臺(tái)機(jī)器上,通過(guò)運(yùn)行init命令饮亏,初始化一個(gè)Leader(默認(rèn)端口:2377)
若忘記token耍贾,可以運(yùn)行以下命令查詢(xún)manager的tokern
2 加入集群
3 在Leader機(jī)器上查看
4 創(chuàng)建服務(wù)
docker service create --name my_web --replicas 4 --publish 9001:80 nginx
稍微講解一下參數(shù)
docker service create:創(chuàng)建服務(wù)的命令
--name my_web:指定服務(wù)的名字
--replicas 3:指定創(chuàng)建容器的實(shí)例數(shù)量
--publish 9001:80:將主機(jī)的9001端口映射到容器的80端口上
nginx:鏡像名稱(chēng)
注意荐开,可以在集群中任意一臺(tái)機(jī)器上進(jìn)行操作
運(yùn)行完后,我們可以通過(guò):docker service ls 來(lái)查看服務(wù)的運(yùn)行狀態(tài)
可以看到在第一臺(tái)主機(jī)上简肴,有my_web.2, my_web.3兩個(gè)容器實(shí)例正在運(yùn)行晃听,而在另外一臺(tái)主機(jī)上有my_web.1, my_web.4兩個(gè)容器實(shí)例在運(yùn)行(隨機(jī)分配的)
5 Scale 橫向擴(kuò)展
在需要擴(kuò)展服務(wù)里,可能通過(guò) docker service update命令來(lái)進(jìn)行操作:
docker service update my_web --replicas 5
這個(gè)命令將原來(lái)的my_web服務(wù)的實(shí)例數(shù)變成了:5
使用Docker Swarm的神奇之處在于砰识,在任意一臺(tái)主機(jī)上進(jìn)行訪問(wèn)能扒,都可以訪問(wèn)創(chuàng)建的nginx服務(wù),原因是docker會(huì)在iptables中注冊(cè)相應(yīng)的端口辫狼,我們可以在任意主機(jī)上查看iptable來(lái)驗(yàn)證
iptables -nL --line-number
另一個(gè)使用Docker Swarm的神奇之處初斑,是docker會(huì)幫我們管理容器,比如我們剛剛調(diào)整了容器的實(shí)例個(gè)數(shù)為:5膨处,那docker swarm就會(huì)確奔樱總是有5個(gè)可用的實(shí)例在運(yùn)行,我們可以通過(guò)人為地停止某一個(gè)容器實(shí)例真椿,過(guò)一會(huì)兒鹃答,我們就會(huì)發(fā)現(xiàn),docker swarm幫我們創(chuàng)建了另外一個(gè)新的容器實(shí)例突硝,補(bǔ)全了5個(gè)测摔。而之前那個(gè)被中止的容器(尸體)還在,我們可以對(duì)其進(jìn)行檢查操作解恰。
6 刪除服務(wù)
最后避咆,當(dāng)我們不需要服務(wù)里舟肉,可以通過(guò) docker service rm命令來(lái)移除服務(wù)
總之,Docker Swarm能非常方便地幫我們編排我們的容器實(shí)例查库,操作也相當(dāng)?shù)暮?jiǎn)單路媚。