docker三劍客之一swarm搭建,回滾升級,擴容與縮容等,實驗部署

Docker swarm

Docker swarm集羣三劍客之一
Docker docker2 docker3
192.168.1.1 192.168.1.20 192.168.1.30html

關閉防火牆,與selinux。3臺dockerhost添加dns域名解析區別主機名。
Bash 或重啓
docker三劍客之一swarm搭建,回滾升級,擴容與縮容等,實驗部署
[root@docker ~]# ping docker2
Ping域名是否能夠通。(時間同步)node

Docker版本必須是:v1.12版本開始。linux

實驗:nginx

1) 描述docker swarm的各節點的特性,總結swarm、node、manager node 、 worker node 和service的概念。web

Swarm:做用運行docker engin(引擎)的多個主機組成的集羣。
Node:每個docker engin都是一個node(節點),分爲manager和worker。docker

Manager node:負責執行容器的編排和集羣的管理工做,保持並維護swarm處於指望的狀態。Swarm能夠有多個manager node,他們會自動協調並選舉一個leader執行編排任務。但相反,不能沒有manager node。apache

Worker node:接收並執行有manager node 派發的任務,而且默認manager node也是一個work node,不過能夠將他設置爲manager-only node。讓它只負責編排和管理工做。vim

Service:用來定義worker上執行的命令。後端

能夠沒有worker node 但不能沒有Manager node瀏覽器

2)部署一個swarm集羣,要求3臺dockerhost,docker01爲manager node,02和03爲worker node.

1》初始化集羣
[root@docker ~]# docker swarm init --advertise-addr 192.168.1.10
//--advertise-addr:指定與其餘node通訊的地址。
保存令牌(令牌只能保存24小時)
docker三劍客之一swarm搭建,回滾升級,擴容與縮容等,實驗部署
上邊返回的結果告訴咱們:初始化成功,而且若是想要添加work節點運行下面的命令:
docker swarm join --token SWMTKN-1-0blimv9lspg990gyt0l9knlpvcxx6xioyqh7p6mxkuxvckui9t-149nryrras3u9vr52n0nc14ui 192.168.1.1:2377
注意:token只有24小時的有效期。
若是想要添加manager節點:運行下邊命令
docker swarm join-toker manager

當其餘兩個節點加入成功,咱們能夠指定docker node ls 查看節點詳情。
查看節點信息
[root@docker ~]# docker node ls
docker三劍客之一swarm搭建,回滾升級,擴容與縮容等,實驗部署
這個星表明所在的終端:
docker三劍客之一swarm搭建,回滾升級,擴容與縮容等,實驗部署

申請離開集羣:(docker2,docker3)
[root@docker2 ~]# docker swarm leave :(申請離開一個集羣以後查看節點狀態會變成down,而後能夠經過manager node將其刪除)
Node left the swarm.
[root@docker3 ~]# docker swarm leave
Node left the swarm.

刪除某節點
[root@docker ~]# docker node rm docker2
docker2
[root@docker ~]# docker node rm docker3
docker3

3)將02和03提高爲manager node,而後再將02和03恢復到worker node。 若是此時將01降級爲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節點的manager降級爲worker
docker node promote :升職:將swarm節點的worker升級爲manager
4)部署一個servcie服務,要求使用httpd鏡像,名稱爲test.要求8個副本數量。而且swarm集羣要求:manager 節點不參加工做

2部署docker swarm集羣網絡
Overlay :覆蓋型網絡:
[root@docker ~]# docker network create -d overlay --attachable docker
mjzqlj8edarzxkiqayr0e5ib9

//attachable:這個參數必須添加,不然不能用於容器。
在建立網絡的時候,咱們並無部署一個存儲服務,好比consul,那是由於docker swarm自帶存儲。

3》部署一個圖形化web UI界面。
以容器的方式去運行
導入鏡像包: myvisualizer.tar
[root@docker ~]# docker load < myvisualizer.tar
docker三劍客之一swarm搭建,回滾升級,擴容與縮容等,實驗部署
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驗證
若是訪問不到,需開啓路由轉發

[root@docker ~]# echo net.ipv4.ip_forward = 1 >> /etc/sysctl.conf 
[root@docker ~]# sysctl -p
net.ipv4.ip_forward = 1

docker三劍客之一swarm搭建,回滾升級,擴容與縮容等,實驗部署

4》建立service(服務)
導入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
docker三劍客之一swarm搭建,回滾升級,擴容與縮容等,實驗部署

//--replicas:副本數量。
大概能夠理解爲:一個副本等同一個容器
//查看service:
docker service ls
//查看service信息:
docker service ps XXX
建立5個副本(容器)
[root@docker ~]# docker service create --replicas 5 --network docker --name web -p 80 nginx:latest
刪除副本
[root@docker ~]# docker service rm web1

就算本地有鏡像,也會上網查找最新的nginx鏡像。
[root@docker ~]# docker service scale web=8
Scale:擴容

("active"|"pause"|"drain")活動/暫停/不參加
//設置manager node不參加
[root@docker ~]# docker node update docker --availability drain
docker三劍客之一swarm搭建,回滾升級,擴容與縮容等,實驗部署
docker三劍客之一swarm搭建,回滾升級,擴容與縮容等,實驗部署

5》搭建私有倉庫。
以前的文章有,這裏就很少說了:
6》自定義鏡像
要求:基於httpd鏡像,更改主訪問界面內容。鏡像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.發佈一個服務,基於上述鏡像

要求:副本數量爲3個。服務的名稱爲bdqn
[root@docker ~]# docker service create --replicas 3 --name bdqn -p 80:80 192.168.1.1:5000/httpd:v1
默認的ingress網絡,包括建立的自定義網絡,爲後端真正爲用戶提供服務的container,提供了一個統一的入口。

docker service create --replicas 3 --name test -p 80 192.168.1.1:5000/httpd:v1

***服務的擴容與縮容(scale)
30000-32767
[root@docker ~]# docker service scale bdqn=6
擴容與縮容能夠直接經過scale進行設置副本數量
服務的升級與回滾
[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:默認狀況下,swarm,一次只更新一個副本,而且兩個副本之間沒有等待時間,咱們能夠經過,--update-parallelism 2:設置並進行更新的副本數量--update-delay :指定滾動更新的時間間隔 docker service  rollback  bdqn回滾:操作。Ps:注意:docker swarm的回滾操作,默認只能回滾到上一次操作的狀態,並不能連續回滾操作。*

相關文章
相關標籤/搜索