您好,登錄后才能下訂單哦!
Docker swarm
Docker swarm集群三劍客之一
Docker docker2 docker3
192.168.1.1 192.168.1.20 192.168.1.30
關(guān)閉防火墻,與selinux。3臺(tái)dockerhost添加dns域名解析區(qū)別主機(jī)名。
Bash 或重啟
[root@docker ~]# ping docker2
Ping域名是否可以通。(時(shí)間同步)
Docker版本必須是:v1.12版本開始。
實(shí)驗(yàn):
1) 描述docker swarm的各節(jié)點(diǎn)的特性,總結(jié)swarm、node、manager node 、 worker node 和service的概念。
Swarm:作用運(yùn)行docker engin(引擎)的多個(gè)主機(jī)組成的集群。
Node:每一個(gè)docker engin都是一個(gè)node(節(jié)點(diǎn)),分為manager和worker。Manager node:負(fù)責(zé)執(zhí)行容器的編排和集群的管理工作,保持并維護(hù)swarm處于期望的狀態(tài)。Swarm可以有多個(gè)manager node,他們會(huì)自動(dòng)協(xié)調(diào)并選舉一個(gè)leader執(zhí)行編排任務(wù)。但相反,不能沒有manager node。
Worker node:接收并執(zhí)行有manager node 派發(fā)的任務(wù),并且默認(rèn)manager node也是一個(gè)work node,不過可以將他設(shè)置為manager-only node。讓它只負(fù)責(zé)編排和管理工作。
Service:用來定義worker上執(zhí)行的命令。
可以沒有worker node 但不能沒有Manager node
2)部署一個(gè)swarm集群,要求3臺(tái)dockerhost,docker01為manager node,02和03為worker node.
1》初始化集群
[root@docker ~]# docker swarm init --advertise-addr 192.168.1.10
//--advertise-addr:指定與其他node通信的地址。
保存令牌(令牌只能保存24小時(shí))
上邊返回的結(jié)果告訴我們:初始化成功,并且如果想要添加work節(jié)點(diǎn)運(yùn)行下面的命令:
docker swarm join --token SWMTKN-1-0blimv9lspg990gyt0l9knlpvcxx6xioyqh7p6mxkuxvckui9t-149nryrras3u9vr52n0nc14ui 192.168.1.1:2377
注意:token只有24小時(shí)的有效期。
如果想要添加manager節(jié)點(diǎn):運(yùn)行下邊命令
docker swarm join-toker manager當(dāng)其他兩個(gè)節(jié)點(diǎn)加入成功,我們可以指定docker node ls 查看節(jié)點(diǎn)詳情。
查看節(jié)點(diǎn)信息
[root@docker ~]# docker node ls
這個(gè)星代表所在的終端:
申請(qǐng)離開集群:(docker2,docker3)
[root@docker2 ~]# docker swarm leave :(申請(qǐng)離開一個(gè)集群之后查看節(jié)點(diǎn)狀態(tài)會(huì)變成down,然后可以通過manager node將其刪除)
Node left the swarm.
[root@docker3 ~]# docker swarm leave
Node left the swarm.
刪除某節(jié)點(diǎn)
[root@docker ~]# docker node rm docker2
docker2
[root@docker ~]# docker node rm docker3
docker3
3)將02和03提升為manager node,然后再將02和03恢復(fù)到worker node。 如果此時(shí)將01降級(jí)為worker node,問是否可以。(不可以)
生成令牌:可以是manager身份或worker身份
[root@docker ~]# docker swarm join-token manager |worker
To add a manager to this swarm, run the following command:
docker swarm join --token SWMTKN-1-0blimv9lspg990gyt0l9knlpvcxx6xioyqh7p6mxkuxvckui9t-e7en15s0hzdibnuj1dnp0hwd4 192.168.1.1:2377
docker node demote :降職:將swarm節(jié)點(diǎn)的manager降級(jí)為worker
docker node promote :升職:將swarm節(jié)點(diǎn)的worker升級(jí)為manager
4)部署一個(gè)servcie服務(wù),要求使用httpd鏡像,名稱為test.要求8個(gè)副本數(shù)量。并且swarm集群要求:manager 節(jié)點(diǎn)不參加工作
2部署docker swarm集群網(wǎng)絡(luò)
Overlay :覆蓋型網(wǎng)絡(luò):
[root@docker ~]# docker network create -d overlay --attachable docker
mjzqlj8edarzxkiqayr0e5ib9
//attachable:這個(gè)參數(shù)必須添加,否則不能用于容器。
在創(chuàng)建網(wǎng)絡(luò)的時(shí)候,我們并沒有部署一個(gè)存儲(chǔ)服務(wù),比如consul,那是因?yàn)閐ocker swarm自帶存儲(chǔ)。
3》部署一個(gè)圖形化web UI界面。
以容器的方式去運(yùn)行
導(dǎo)入鏡像包: myvisualizer.tar
[root@docker ~]# docker load < myvisualizer.tar
docker run -d -p 8080:8080 -e HOST=192.168.1.1 -e PORT=8080 -v /var/run/docker.sock:/var/run/docker.sock --name visualizer dockersamples/visualizer:latest
然后通過瀏覽器fangwen驗(yàn)證
如果訪問不到,需開啟路由轉(zhuǎn)發(fā)
[root@docker ~]# echo net.ipv4.ip_forward = 1 >> /etc/sysctl.conf
[root@docker ~]# sysctl -p
net.ipv4.ip_forward = 1
4》創(chuàng)建service(服務(wù))
導(dǎo)入nginx.tar鏡像包
[root@docker ~]# docker load < nginx.tar
[root@docker ~]# docker service create --replicas 1 --network docker --name web2 -p 80 nginx:latest
[root@docker ~]# docker service ps web2
//--replicas:副本數(shù)量。
大概可以理解為:一個(gè)副本等同一個(gè)容器
//查看service:
docker service ls
//查看service信息:
docker service ps XXX
創(chuàng)建5個(gè)副本(容器)
[root@docker ~]# docker service create --replicas 5 --network docker --name web -p 80 nginx:latest
刪除副本
[root@docker ~]# docker service rm web1就算本地有鏡像,也會(huì)上網(wǎng)查找最新的nginx鏡像。
[root@docker ~]# docker service scale web=8
Scale:擴(kuò)容("active"|"pause"|"drain")活動(dòng)/暫停/不參加
//設(shè)置manager node不參加
[root@docker ~]# docker node update docker --availability drain
5》搭建私有倉庫。
之前的文章有,這里就不多說了:
6》自定義鏡像
要求:基于httpd鏡像,更改主訪問界面內(nèi)容。鏡像tag版本為v1。
[root@docker ~]# mkdir {v1,v2,v3}
[root@docker v1]# vim index.html
[root@docker v1]# vim Dockerfile
FROM httpd
ADD index.html /usr/local/apache2/htdocs/index.html
[root@docker v1]# docker build -t 192.168.1.1:5000/httpd:v1 .
[root@docker v1]# docker push 192.168.1.1:5000/httpd:v1
**v2**
[root@docker v1]# cd ../v2
[root@docker v2]# ls
[root@docker v2]# echo 22222 > index.html
[root@docker v2]# cat > Dockerfile << EOF
> FROM httpd
> ADD index.html /usr/local/apache2/htdocs/index.html
> EOF
[root@docker v2]# docker build -t 192.168.1.1:5000/httpd:v2 .
**v3**
[root@docker v3]# echo 33333333 >index.html
[root@docker v3]# cat > Dockerfile << EOF
> FROM httpd
> ADD index.html /usr/local/apache2/htdocs/index.html
> EOF
[root@docker v3]# docker build -t 192.168.1.1:5000/httpd:v3 .
Sending build context to Docker daemon 3.072kB
Step 1/2 : FROM httpd
---> ff0f8d389b3a
Step 2/2 : ADD index.html /usr/local/apache2/htdocs/index.html
---> 0bdecd412589
Successfully built 0bdecd412589
Successfully tagged 192.168.1.1:5000/httpd:v3
7.發(fā)布一個(gè)服務(wù),基于上述鏡像
要求:副本數(shù)量為3個(gè)。服務(wù)的名稱為bdqn
[root@docker ~]# docker service create --replicas 3 --name bdqn -p 80:80 192.168.1.1:5000/httpd:v1
默認(rèn)的ingress網(wǎng)絡(luò),包括創(chuàng)建的自定義網(wǎng)絡(luò),為后端真正為用戶提供服務(wù)的container,提供了一個(gè)統(tǒng)一的入口。
docker service create --replicas 3 --name test -p 80 192.168.1.1:5000/httpd:v1
***服務(wù)的擴(kuò)容與縮容(scale)
30000-32767
[root@docker ~]# docker service scale bdqn=6
擴(kuò)容與縮容可以直接通過scale進(jìn)行設(shè)置副本數(shù)量
服務(wù)的升級(jí)與回滾
[root@docker ~]# docker service update --image 192.168.1.1:5000/httpd:v2 bdqn
//平滑的更新
[root@docker ~]# docker service update --image 192.168.1.1:5000/httpd:v3 --update-parallelism 2 --update-delay 1m bdqn
PS:默認(rèn)情況下,swarm,一次只更新一個(gè)副本,并且兩個(gè)副本之間沒有等待時(shí)間,我們可以通過,
--update-parallelism 2:設(shè)置并進(jìn)行更新的副本數(shù)量
--update-delay :指定滾動(dòng)更新的時(shí)間間隔
?docker service ?rollback ?bdqn
回滾:操做。
Ps:注意:docker swarm的回滾操做,默認(rèn)只能回滾到上一次操做的狀態(tài),并不能連續(xù)回滾操做。*
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。