日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

docker学习笔记(七)docker-swarm

發(fā)布時(shí)間:2024/4/11 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 docker学习笔记(七)docker-swarm 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄

搭建Swarm環(huán)境

swarm基本操作

swarm實(shí)戰(zhàn)

docker swarm服務(wù)發(fā)布模式

docker stack


官網(wǎng):https://docs.docker.com/swarm/overview/

Docker Swarm is native clustering for Docker. It turns a pool of Docker hosts into a single, virtual Docker host.

Swarm 是 Docker 官方提供的集群管理工具,其主要作用是把若干臺(tái) Docker 主機(jī)抽象為一個(gè)整體,并且通過一個(gè)入口統(tǒng)一管理這些 Docker 主機(jī)上的各種 Docker 資源。

一個(gè) Swarm由一個(gè)或多個(gè)可以互相通信的Docker?節(jié)點(diǎn)組成.
節(jié)點(diǎn)會(huì)被分為兩類,Manager節(jié)點(diǎn)和Worker節(jié)點(diǎn)。
Manager負(fù)責(zé)控制集群,監(jiān)控集群狀態(tài)、分發(fā)任務(wù)至worker節(jié)點(diǎn)等操作;Worker節(jié)點(diǎn)則接收來自Master節(jié)點(diǎn)的任務(wù)并在其上執(zhí)行
相當(dāng)于Manager是包工頭,Worker是底層實(shí)際干活的工人。

搭建Swarm環(huán)境

這里使用的docker在線環(huán)境?https://labs.play-with-docker.com/

(1)準(zhǔn)備3臺(tái)centos7機(jī)器
? ? 192.168.0.31 (Manager)
? ? 192.168.0.32 (Worker01)
? ? 192.168.0.33?(Worker02)
(2)初始化Manager節(jié)點(diǎn)
? ? docker swarm init --advertise-addr=192.168.0.31
(3)將worker節(jié)點(diǎn)加入到集群里

docker swarm join --token SWMTKN-1-5rxv93eb0hg3mzxze2lukaye7rkqm5uvlyk30n2lk9h2z36j2t-650nf075oarceftbefx6palr2 192.168.0.31:2377



查看集群狀態(tài)


(4)node類型的轉(zhuǎn)換

#可以將worker提升成Manager節(jié)點(diǎn),從而保證swarm的高可用 docker node promote node2 docker node promote node1#降級(jí)可以用demote docker node demote node2

swarm基本操作

Service是自 Docker 1.12 后新引入的概念,僅適用于 docker swarm

Service配置的屬性和docker的容器屬性基本一致,比如容器名、端口映射、network和image. Servcie可以簡單理解為一組相同的容器副本

(1)創(chuàng)建一個(gè)tomcat的service
? ??docker service create --name my-tomcat tomcat
(2)查看當(dāng)前swarm的service
? ??docker service ls
(3)查看service的啟動(dòng)日志
? ??docker service logs my-tomcat
(4)查看service的詳情
? ??docker service inspect my-tomcat
(5)查看my-tomcat運(yùn)行在哪個(gè)node上
? ?docker service ps my-tomcat

(6)水平擴(kuò)展service
docker service scale my-tomcat=3
docker service ls
docker service ps my-tomcat

(7)如果停掉一個(gè)node的container,service會(huì)自動(dòng)幫我們維護(hù)容器副本,創(chuàng)建一個(gè)新的容器

(8)刪除service
??docker service rm my-tomcat


swarm實(shí)戰(zhàn)

單機(jī)docker中使用bridge網(wǎng)絡(luò)進(jìn)行連接通信,多機(jī)中使用的是overlay網(wǎng)絡(luò)

1)在manager節(jié)點(diǎn)創(chuàng)建一個(gè)overlay網(wǎng)絡(luò),用于docker swarm中多機(jī)通信
???docker network create -d overlay my-overlay-net
? ?docker network ls

(2)創(chuàng)建mysql和wordpress的service(Manager node)??

docker service create --name mysql --mount type=volume,source=v1,destination=/var/lib/mysql -e MYSQL_ROOT_PASSWORD=examplepass -e MYSQL_DATABASE=db_wordpress --network my-overlay-net mysql:5.6docker service create --name wordpress -e WORDPRESS_DB_USER=root -e WORDPRESS_DB_PASSWORD=examplepass -e?WORDPRESS_DB_HOST=mysql:3306 -e?WORDPRESS_DB_NAME=db_wordpress -p 8080:80 --network my-overlay-net wordpress

? 運(yùn)行成功
? ? ? ??
通過各個(gè)node的ip:8080都能訪問成功(這里我通過play-with-docker open port訪問8080端口)

?

這里的wordpress連接mysql是通過服務(wù)名mysql來連接的,說明其中一定有dns解析,會(huì)根據(jù)serviceName查找到對(duì)應(yīng)的ip,進(jìn)行連接,這樣在部署(擴(kuò)容)的時(shí)候就無需關(guān)心容器的ip怎么變化

For most situations, you should connect to the service name, which is load-balanced and handled by all containers (“tasks”) backing the service .

docker swarm服務(wù)發(fā)布模式

Docker Swarm 支持兩種服務(wù)發(fā)布模式:Ingress模式(默認(rèn)),Host模式。
通過 Ingress 模式發(fā)布的服務(wù),可以保證從 Swarm 集群內(nèi)任一節(jié)點(diǎn)(即使沒有運(yùn)行服務(wù)的節(jié)點(diǎn))都能訪問該服務(wù);以 Host 模式發(fā)布的服務(wù)只能通過運(yùn)行服務(wù)副本的節(jié)點(diǎn)來訪問。下圖展示了兩種模式的區(qū)別。

想要進(jìn)一步了解ingress和服務(wù)發(fā)現(xiàn)的底層可以閱讀以下文章:
https://www.jianshu.com/p/c83a9173459f
https://www.cnblogs.com/zonehoo/p/11401930.html

(1)單機(jī)部署一個(gè)tomcat service,各個(gè)集群node都可以訪問到

[node3] (local) root@192.168.0.61 ~ $ docker service create --name tomcat -p 8080:8080 --network my-overlay-net tomcat fywyxuvpbpurt3ha0pkq4wwyu overall progress: 1 out of 1 tasks 1/1: running [==================================================>] verify: Service converged [node3] (local) root@192.168.0.61 ~ $ docker service ls ID NAME MODE REPLICAS IMAGE PORTS fywyxuvpbpur tomcat replicated 1/1 tomcat:latest *:8080->8080/tcp $ docker service ps tomcat ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS 8pjqve65ebww tomcat.1 tomcat:latest node1 Running Running 40 seconds ago #該tomcat容器實(shí)際部署再node1上,container為4fa7 [node1] (local) root@192.168.0.63 ~ $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4fa7f6681778 tomcat:latest "catalina.sh run" 5 minutes ago Up 5 minutes 8080/tcp tomcat.1.8pjqve65ebwwi3adp53eb3xbg

其他node節(jié)點(diǎn)都能通過訪問本地的8080端口訪問到該tomcat

(2)部署多副本的whoami service,可以通過serviceName進(jìn)行負(fù)載均衡

[node3] (local) root@192.168.0.61 ~ $ docker service create --name whoami -p 8000:8000 --network my-overlay-net -d jwilder/whoami k1d6tus51sirz9xd4elgz2xvm [node3] (local) root@192.168.0.61 ~ $ docker service ps whoami ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS 8kaudc0xvpdm whoami.1 jwilder/whoami:latest node3 Running Running 10 seconds ago [node3] (local) root@192.168.0.61 ~ $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES cb723685302a jwilder/whoami:latest "/app/http" 48 seconds ago Up 47 seconds 8000/tcp whoami.1.8kaudc0xvpdmax2k12nf7h6m5#不同節(jié)點(diǎn)上的tomcat,whomi服務(wù),可以容器內(nèi)通過serviceName ping通 [node3] (local) root@192.168.0.61 ~ $ docker exec -it cb72368 ping tomcat PING tomcat (10.0.0.2): 56 data bytes 64 bytes from 10.0.0.2: seq=0 ttl=64 time=0.117 ms 64 bytes from 10.0.0.2: seq=1 ttl=64 time=0.093 ms 64 bytes from 10.0.0.2: seq=2 ttl=64 time=0.097 ms $ docker exec -it 4fa7 ping whoami PING whoami (10.0.0.5) 56(84) bytes of data. 64 bytes from 10.0.0.5 (10.0.0.5): icmp_seq=1 ttl=64 time=0.137 ms 64 bytes from 10.0.0.5 (10.0.0.5): icmp_seq=2 ttl=64 time=0.052 ms 64 bytes from 10.0.0.5 (10.0.0.5): icmp_seq=3 ttl=64 time=0.061 ms#擴(kuò)容成3個(gè)副本,通過whoami:8000訪問,返回不同的hostid [node3] (local) root@192.168.0.61 ~ $ docker service scale whoami=3 whoami scaled to 3 overall progress: 3 out of 3 tasks 1/3: running [==================================================>] 2/3: running [==================================================>] 3/3: running [==================================================>] verify: Service converged [node3] (local) root@192.168.0.61 ~ $ docker service ps whoami ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS 8kaudc0xvpdm whoami.1 jwilder/whoami:latest node3 Running Running 3 minutes ago 4jv21432xgqo whoami.2 jwilder/whoami:latest node2 Running Running 8 seconds ago svg62zqee2g1 whoami.3 jwilder/whoami:latest node1 Running Running 8 seconds ago [node1] (local) root@192.168.0.63 ~ $ docker exec -it 4fa7 curl whoami:8000 I'm bca5e1a05a00 [node1] (local) root@192.168.0.63 ~ $ docker exec -it 4fa7 curl whoami:8000 I'm 6f25815a733c [node1] (local) root@192.168.0.63 ~ $ docker exec -it 4fa7 curl whoami:8000 I'm cb723685302a [node1] (local) root@192.168.0.63 ~ $ docker exec -it 4fa7 curl whoami:8000 I'm bca5e1a05a00

?

service對(duì)其他服務(wù)提供了一個(gè)統(tǒng)一的VIP入口,接收其他服務(wù)訪問時(shí)會(huì)做負(fù)載均衡。

最好再畫一張圖。

docker stack

在docker中有docker-compose幫助簡化部署操作,docker swarm中也可以使用docker stack來進(jìn)行部署管理servcie
具體的定義方式跟compose差不多,這里就不一一解釋了
(1)新建service.yml文件

version: '3'services:wordpress:image: wordpressports:- 8080:80environment:WORDPRESS_DB_HOST: dbWORDPRESS_DB_USER: exampleuserWORDPRESS_DB_PASSWORD: examplepassWORDPRESS_DB_NAME: exampledbnetworks:- ol-netvolumes:- wordpress:/var/www/htmldeploy:mode: replicatedreplicas: 3restart_policy:condition: on-failuredelay: 5smax_attempts: 3update_config:parallelism: 1delay: 10sdb:image: mysql:5.7environment:MYSQL_DATABASE: exampledbMYSQL_USER: exampleuserMYSQL_PASSWORD: examplepassMYSQL_RANDOM_ROOT_PASSWORD: '1'volumes:- db:/var/lib/mysqlnetworks:- ol-netdeploy:mode: globalplacement:constraints:- node.role == managervolumes:wordpress:db:networks:ol-net:driver: overlay

(2)根據(jù)service.yml創(chuàng)建service
? ??docker statck deploy -c service.yml? my-service
(3)常見操作
? ?
查看stack具體信息
? ?docker stack ls


? ?查看具體的service
? ?docker stack services my-service

成功訪問

?

總結(jié)

以上是生活随笔為你收集整理的docker学习笔记(七)docker-swarm的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。