主頁 >  其他 > Linux進階 | 超詳細全方面的Docker Swarm Web集群介紹與部署!

Linux進階 | 超詳細全方面的Docker Swarm Web集群介紹與部署!

2021-09-02 07:15:37 其他

創作不易,來了的客官點點關注,收藏,訂閱一鍵三連?😜


前言

運維之基礎——Linux,我是一個即將畢業的大學生,超超,如果你也在學習Linux,不妨跟著萌新超超一起學習Linux,拿下Linux,一起加油,共同努力,拿到理想offer!


系列文章

Linux進階 | docker compose的安裝與使用詳解,超詳細!

Linux進階 | Docker部署nginx的web服務,VOLUME的使用詳解,實作資料持久化!

Linux進階 | 2萬字總結最詳細的Docker的安裝、底層隔離機制和簡單使用!

Linux | 詳解系統監控和常用命令(top free dstat)


概述

Docker 屬于 Linux 容器的一種封裝,提供簡單易用的容器使用介面,它是目前最流行的 Linux 容器解決方案,本期內容為Docker第五期,通過本期內容將會掌握集群的概念,以及swarm的安裝部署,以及swarm和compose以及volume的結合,


目錄

前言

概述

超超Docker學習思維導圖

集群(cluster)

集群的優勢

swarm(蜂群)的概念

什么是swarm

swarm與compose

swarm與k8s

swarm的優勢

swarm的基本結構

swarm的關鍵點

swarm的使用綱要

swarm的使用

swarm的其他命令

swarm集群部署web服務

思考:swarm manager 是通過什么方式和swarm node進行通信的?

鏡像的滾動升級操作

結合compose和swarm進行多服務的編排

compose和swarm結合有什么優勢

代碼實體部署

Swarm中使用Volume

問題:如何解決web服務的網頁保持一致?


超超Docker學習思維導圖

集群(cluster)

多臺機器完成某個功能,計算機集群簡稱集群,是一種計算機系統,它通過一組松散集成的計算機軟體(和/或)硬體連接起來高度緊密地協作完成計算作業,

舉個生活實體:單點(非集群)模式,就類似銀行只開放一個視窗來辦理業務,而通過建立集群,就相當于一個銀行開通多個視窗辦理業務,那么這樣不僅能提高辦事效率,還能減少風險,

集群的優勢

高可伸縮性:服務器集群具有很強的可伸縮性,隨著需求和負荷的增長,可以向集群系統添加更多的服務器,在這樣的配置中,可以有多臺服務器執行相同的應用和資料庫操作,

高可用性:高可用性是指,在不需要操作者干預的情況下,防止系統發生故障或從故障中自動恢復的能力,通過把故障服務器上的應用程式轉移到備份服務器上運行,集群系統能夠把正常運行時間提高到大于99.9%,大大減少服務器和應用程式的停機時間,

高可管理性:系統管理員可以從遠程管理一個、甚至一組集群,就好像在單機系統中一樣,


swarm(蜂群)的概念

什么是swarm

對多臺安裝了Docker的宿主機上的容器進行編排,

Swarm是Docker官方提供的一款集群管理工具,其主要作用是把若干臺Docker主機抽象為一個整體,并且通過一個入口統一管理這些Docker主機上的各種Docker資源,

一個 swarm 由多個 Docker 主機組成,它們以swarm 模式運行并充當管理器(管理成員資格和委派)和作業器(運行 swarm 服務),

一個給定的 Docker 主機可以是管理者、作業者,或同時扮演這兩個角色,

swarm與compose

Docker Swarm Docker Compose 一樣,都是 Docker 官方容器編排專案,但不同的是,Docker Compose 是在一個單個服務器或主機上創建多個容器的工具,而 Docker Swarm 則可以在多個服務器或主機上創建容器集群服務,對于微服務的部署,顯然 Docker Swarm 會更加適合,

swarm與k8s

Swarm和Kubernetes比較類似,但是更加輕,具有的功能也較kubernetes更少一些,

swarm的優勢

與獨立容器相比,swarm 服務的主要優勢之一是可以修改服務的配置,包括它所連接的網路和卷,而無需手動重新啟動服務,Docker 將更新配置,停止使用過期配置的服務任務,并創建與所需配置匹配的新任務,

swarm的基本結構

在以上結構圖可以看出Docker Client使用Swarm對集群(Cluster)進行調度使用,

swarm的關鍵點

1.Swarm

集群的管理和編排是使用嵌入docker引擎的SwarmKit,可以在docker初始化時啟動swarm模式或者加入已存在的swarm

2.Node

一個節點是docker引擎集群的一個實體,您還可以將其視為Docker節點,您可以在單個物理計算機或云服務器上運行一個或多個節點,但生產群集部署通常包括分布在多個物理和云計算機上的Docker節點,

要將應用程式部署到swarm,請將服務定義提交給Manager節點,Manager節點將Task的作業單元分派給worker node,

Manager節點還執行維護所需群集狀態所需的編排和集群管理功能,Manager節點選擇單個領導者來執行編排任務,

作業節點接收并執行從管理器節點分派的任務,默認情況下,Manager節點還將服務作為作業節點運行,但您可以將它們配置為僅運行管理器任務并且是僅管理器節點,代理程式在每個作業程式節點上運行,并報告分配給它的任務,Worker node向Manager節點通知其分配的任務的當前狀態,以便管理器可以維持每個作業者的期望狀態,

3.Service

一個服務是Task的定義,Manager或Work node上執行,它是群體系統的中心結構,是用戶與群體互動的主要根源,創建服務時,你需要指定要使用的容器鏡像,

4.Task

任務是在docekr容器中執行的命令,Manager節點根據指定數量的任務副本分配任務給worker節點

swarm的使用綱要

docker swarm:集群管理,子命令有init, join, leave, update,(docker swarm --help查看幫助)

docker service:服務創建,子命令有create, inspect, update, remove, tasks,(docker service--help查看幫助)

docker node:節點管理,子命令有accept, promote, demote, inspect, update, tasks, ls, rm,(docker node --help查看幫助)

node是加入到swarm集群中的一個docker引擎物體,可以在一臺物理機上運行多個node,node分為:

manager node --> 也就是管理節點

worker nodes --> 也就是作業節點

manager node(管理節點):執行集群的管理功能,維護集群的狀態,選舉一個leader節點去執行調度任務,

②worker node(作業節點):接收和執行任務,參與容器集群負載調度,僅用于承載task,

③service(服務):一個服務是作業節點上執行任務的定義,創建一個服務,指定了容器所使用的鏡像和容器運行的命令,service是運行在worker nodes上的task的描述,service的描述包括使用哪個docker 鏡像,以及在使用該鏡像的容器中執行什么命令,

④task(任務):一個任務包含了一個容器及其運行的命令,task是service的執行物體,task啟動docker容器并在容器中執行任務,


swarm的使用

1.部署機器環境(四臺機器,CentOS8Ubuntu系統)

IP:192.168.232.132 主機名:docker-manager-1 擔任角色:swarm manager

IP:192.168.232.133 主機名:docker-2 擔任角色:swarm node1

IP:192.168.232.134 主機名:docker-3 擔任角色:swarm node2

IP:192.168.232.131 主機(ubuntu)名:chaochao 擔任角色:swarm node3

2.配置hosts檔案

swarm manager

[root@docker-manager-1 ~]# cat /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4

::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.232.132 manager

192.168.232.133 worker1

192.168.232.134 worker2

192.168.232.131 worker3

[root@docker-manager-1 ~]# ^C

另外三臺worker node操作一致

3.設定防火墻

關閉四臺機器上的防火墻,

如果是開啟防火墻,則需要在所有節點的防火墻上依次放行2377/tcp(管理埠)、7946/udp(節點間通信埠)、4789/udp(overlay 網路埠,容器之間)埠,

[root@docker-manager-1 ~]# systemctl disable firewalld

[root@docker-manager-1 ~]#
[root@docker-2 ~]# systemctl disable firewalld

[root@docker-2 ~]#

另外兩臺操作一致

4.重啟docker服務,防止導致網路例外

[root@docker-manager-1 ~]# service docker restart

Redirecting to /bin/systemctl restart docker.service

[root@docker-manager-1 ~]#
[root@docker-2 ~]# service docker restart

Redirecting to /bin/systemctl restart docker.service

[root@docker-2 ~]#
[root@docker-3 ~]# service docker restart

Redirecting to /bin/systemctl restart docker.service

[root@docker-3 ~]#
root@chaochao:~# service docker restart

root@chaochao:~#

5.創建swarm集群

對于manager

# 命令:docker swarm init --advertise-addr manager的IP地址

[root@docker-manager-1 ~]# docker swarm init --advertise-addr 192.168.232.132

Swarm initialized: current node (ooauma1x037wufqkh21uj0j7v) is now a manager.

 

To add a worker to this swarm, run the following command:

 

    docker swarm join --token SWMTKN-1-0200k3nv43fmc6hcuurx8z1iehsqq6uro12qjfeoxrkmk9fmom-1ub4wsmlpl4zhqalzdrgukx3l 192.168.232.132:2377

 

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

 

[root@docker-manager-1 ~]#

對于三臺swarm nodes

輸入manager創建的命令: docker swarm join --token ……,此命令在manager創建swarm時會自動生成,

[root@docker-2 ~]# docker swarm join --token SWMTKN-1-0200k3nv43fmc6hcuurx8z1iehsqq6uro12qjfeoxrkmk9fmom-1ub4wsmlpl4zhqalzdrgukx3l 192.168.232.132:2377

This node joined a swarm as a worker.

[root@docker-2 ~]#
[root@docker-3 ~]# docker swarm join --token SWMTKN-1-0200k3nv43fmc6hcuurx8z1iehsqq6uro12qjfeoxrkmk9fmom-1ub4wsmlpl4zhqalzdrgukx3l 192.168.232.132:2377

This node joined a swarm as a worker.

[root@docker-3 ~]#
root@chaochao:~# docker swarm join --token SWMTKN-1-0200k3nv43fmc6hcuurx8z1iehsqq6uro12qjfeoxrkmk9fmom-1ub4wsmlpl4zhqalzdrgukx3l 192.168.232.132:2377

This node joined a swarm as a worker.

root@chaochao:~#

Tips

退出swarm集群的命令:docker swarm leave

對于manager,解散集群需要加上--force:docker swarm leave --force

6.查看集群的相關資訊

[root@docker-manager-1 ~]# docker info

…….

Server:

 Containers: 33

  Running: 2

  Paused: 0

  Stopped: 31

 Images: 61

 Server Version: 20.10.8

 Storage Driver: overlay2

  Backing Filesystem: xfs

  Supports d_type: true

  Native Overlay Diff: true

  userxattr: false

……

#上面的命令執行后 找到Swarm的關鍵字,就可以看到相關資訊了swarm managerswarm node都可以運行此命令

[root@docker-manager-1 ~]# docker node ls

ID                            HOSTNAME           STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION

rge7nydl1tr8am0340zfxqggm     chaochao           Ready     Active                          20.10.8

svygquzhtveeenyd9y4i126tu     docker-2           Ready     Active                          20.10.8

naer5j3rs5z4fea8cckcezpf3     docker-3           Ready     Active                          20.10.8

ooauma1x037wufqkh21uj0j7v *   docker-manager-1   Ready     Active         Leader           20.10.8

[root@docker-manager-1 ~]#

#上面的命令是查看集群中的機器(注意上面node ID旁邊那個*號表示現在連接到這個節點上),只有swarm manager可以運行此命令

7.在Swarm中部署服務

在docker-manager-1上運行docker service create --replicas 10 --name helloworld alpine ping docker.com

[root@docker-manager-1 ~]# docker service create --replicas 10 --name helloworld alpine ping docker.com

l65e19mrz1ywhu8sl3zim4bet

overall progress: 10 out of 10 tasks

1/10: running   [==================================================>]

2/10: running   [==================================================>]

3/10: running   [==================================================>]

4/10: running   [==================================================>]

5/10: running   [==================================================>]

6/10: running   [==================================================>]

7/10: running   [==================================================>]

8/10: running   [==================================================>]

9/10: running   [==================================================>]

10/10: running   [==================================================>]

verify: Service converged

[root@docker-manager-1 ~]#

查看swarm服務:docker service ls

[root@docker-manager-1 ~]# docker service ls

ID             NAME         MODE         REPLICAS   IMAGE           PORTS

l65e19mrz1yw   helloworld   replicated   10/10      alpine:latest  

[root@docker-manager-1 ~]#

查看nginx容器運行情況(分配情況)

命令:docker ps

推薦:

manager上運行:docker service ps chao-web

[root@docker-manager-1 ~]# docker ps

CONTAINER ID   IMAGE              COMMAND                  CREATED         STATUS          PORTS                                   NAMES

fd4410c3a132   alpine:latest      "ping docker.com"        2 minutes ago   Up 2 minutes                                            helloworld.1.svjs7kjfdicjf7ad0xhn850kx

33beffba02d8   alpine:latest      "ping docker.com"        2 minutes ago   Up 2 minutes                                            helloworld.7.tepg67357odbvi99bz8n1s2z3

2cd834cab1d2   alpine:latest      "ping docker.com"        2 minutes ago   Up 2 minutes 
[root@docker-2 ~]# docker ps

CONTAINER ID   IMAGE              COMMAND                  CREATED         STATUS          PORTS                                   NAMES

13c8d54bc217   alpine:latest      "ping docker.com"        3 minutes ago   Up 3 minutes                                            helloworld.6.5emn8zu59a6gukvix2ilx7943

cd476a1148be   alpine:latest      "ping docker.com"        3 minutes ago   Up 3 minutes                                            helloworld.10.elvjakl7ir3p0g4b2994t797z
[root@docker-3 ~]# docker ps

CONTAINER ID   IMAGE              COMMAND                  CREATED         STATUS          PORTS                                   NAMES

e5421b466442   alpine:latest      "ping docker.com"        3 minutes ago   Up 3 minutes                                            helloworld.3.odr0kjnofzq11xf05jcernsca

9895ecb2e08a   alpine:latest      "ping docker.com"        3 minutes ago   Up 3 minutes                                            helloworld.4.gy7o9qb1mckhna10esuk6qluc
root@chaochao:~# docker ps

CONTAINER ID   IMAGE           COMMAND             CREATED         STATUS         PORTS     NAMES

83db926e26fc   alpine:latest   "ping docker.com"   4 minutes ago   Up 3 minutes             helloworld.5.wmqr3orrxyd9jl5n2qfm5rfxp

9648166b579d   alpine:latest   "ping docker.com"   4 minutes ago   Up 3 minutes             helloworld.8.q4kr2i2kz7qkjtqu5fav0cmy0

6cc0ad2cc251   alpine:latest   "ping docker.com"   4 minutes ago   Up 3 minutes             helloworld.9.v1ctfiho9nojzps4ycdi8xemf

root@chaochao:~#

添加、減少副本任務

增加命令1 docker service update --replicas 20 helloworld

[root@docker-manager-1 ~]# docker  service update --replicas  20 helloworld

helloworld

overall progress: 20 out of 20 tasks

1/20: running   [==================================================>]

2/20: running   [==================================================>]

3/20: running   [==================================================>]

4/20: running   [==================================================>]

5/20: running   [==================================================>]

6/20: running   [==================================================>]

7/20: running   [==================================================>]

8/20: running   [==================================================>]

9/20: running   [==================================================>]

10/20: running   [==================================================>]

11/20: running   [==================================================>]

12/20: running   [==================================================>]

13/20: running   [==================================================>]

14/20: running   [==================================================>]

15/20: running   [==================================================>]

16/20: running   [==================================================>]

17/20: running   [==================================================>]

18/20: running   [==================================================>]

19/20: running   [==================================================>]

20/20: running   [==================================================>]

verify: Service converged

[root@docker-manager-1 ~]#

增加和減少通用命令: docker service scale helloworld=5

[root@docker-manager-1 ~]# docker  service scale helloworld=5

helloworld scaled to 5

overall progress: 5 out of 5 tasks

1/5: running   [==================================================>]

2/5: running   [==================================================>]

3/5: running   [==================================================>]

4/5: running   [==================================================>]

5/5: running   [==================================================>]

verify: Service converged

[root@docker-manager-1 ~]#
[root@docker-manager-1 ~]# docker  service scale helloworld=15

helloworld scaled to 15

overall progress: 15 out of 15 tasks

1/15: running   [==================================================>]

2/15: running   [==================================================>]

3/15: running   [==================================================>]

4/15: running   [==================================================>]

5/15: running   [==================================================>]

6/15: running   [==================================================>]

7/15: running   [==================================================>]

8/15: running   [==================================================>]

9/15: running   [==================================================>]

10/15: running   [==================================================>]

11/15: running   [==================================================>]

12/15: running   [==================================================>]

13/15: running   [==================================================>]

14/15: running   [==================================================>]

15/15: running   [==================================================>]

verify: Service converged

[root@docker-manager-1 ~]#

swarm的其他命令

1.洗掉節點,命令:docker node rm --force 節點名"

2.更改節點的狀態

swarm集群中node的availability狀態可以為active或者drain

active狀態下,node可以接受來自manager節點的任務分派

drain狀態下,node節點會結束task,且不再接受來自manager節點的任務分派(也就是節點離線)

命令: docker node update --availability 狀態 節點名

[root@docker-manager-1 ~]# docker node update --availability drain docker-3          

# 將docker-3節點離線,
# 再次修改為active狀態(將離線的節點再次上線)

[root@docker-manager-1 ~]# docker node update --availability active docker-3

swarm集群部署web服務

1.創建服務

命令:docker service create --replicas 任務數量 --name 服務名 -p 8020:80(設定埠影響) nginx(鏡像名)

[root@docker-manager-1 ~]# docker service create --replicas 10 --name chao-web -p 8020:80 nginx

5h4b8hlq5mvkh1gkda71b7z8o

overall progress: 10 out of 10 tasks

1/10: running   [==================================================>]

2/10: running   [==================================================>]

3/10: running   [==================================================>]

4/10: running   [==================================================>]

5/10: running   [==================================================>]

6/10: running   [==================================================>]

7/10: running   [==================================================>]

8/10: running   [==================================================>]

9/10: running   [==================================================>]

10/10: running   [==================================================>]

verify: Service converged

[root@docker-manager-1 ~]#

2.查看集群服務分配情況

命令:docker service ps chao-web

[root@docker-manager-1 ~]# docker service ps chao-web

ID             NAME             IMAGE          NODE               DESIRED STATE   CURRENT STATE                ERROR                              PORTS

wp1rdbn4ocyi   chao-web.1       nginx:latest   chaochao           Running         Running about a minute ago                                     

v4s3ketvbjiy   chao-web.2       nginx:latest   docker-3           Running         Running about a minute ago                                     

3ep775a816g0    \_ chao-web.2   nginx:latest   docker-3           Shutdown        Rejected 2 minutes ago       "No such image: nginx:latest@s…"  

kpj8esqq3ee7   chao-web.3       nginx:latest   docker-2           Running         Running about a minute ago                                     

nypfltoerv7h   chao-web.4       nginx:latest   chaochao           Running         Running about a minute ago                                     

5qukcxy6tnl3   chao-web.5       nginx:latest   docker-3           Running         Running about a minute ago                                     

xot5ioknnrsy   chao-web.6       nginx:latest   docker-manager-1   Running         Running about a minute ago                                     

iv6r6a6buz5n   chao-web.7       nginx:latest   docker-2           Running         Running about a minute ago                                     

xxc1lszt5y6k   chao-web.8       nginx:latest   docker-3           Running         Running about a minute ago                                     

5og6286rgl70   chao-web.9       nginx:latest   docker-2           Running         Running about a minute ago                                     

xcw038hy4atr   chao-web.10      nginx:latest   docker-manager-1   Running         Running about a minute ago                                     

[root@docker-manager-1 ~]#

3.查看創建的服務的詳細資訊

命令:docker service inspect chao-web

[root@docker-manager-1 ~]# docker service inspect chao-web

[

    {

        "ID": "5h4b8hlq5mvkh1gkda71b7z8o",

        "Version": {

            "Index": 209

        },

        "CreatedAt": "2021-08-23T02:16:28.984070915Z",

        "UpdatedAt": "2021-08-23T02:16:28.986493133Z",

        "Spec": {

            "Name": "chao-web",

            "Labels": {},

            "TaskTemplate": {

                "ContainerSpec": {

                    "Image": "nginx:latest@sha256:4d4d96ac750af48c6a551d757c1cbfc071692309b491b70b2b8976e102dd3fef",

                    "Init": false,

                    "StopGracePeriod": 10000000000,

                    "DNSConfig": {},

                    "Isolation": "default"

……..

4.查看服務是否創建成功

訪問:https://localhost:埠號

思考:swarm manager 是通過什么方式和swarm node進行通信的?

2377 --> swarm manager

7946 --> swarm node

4789 --> swarm容器

manager通過埠來管理swarm節點在所有節點的防火墻上依次放行2377/tcp(管理埠)、7946/udp(節點間通信埠)、4789/udp(overlay 網路埠)埠,

[root@docker-manager-1 ~]# ss -anplut

Netid  State   Recv-Q  Send-Q    Local Address:Port     Peer Address:Port                                          

udp    UNCONN  0       0               0.0.0.0:4789          0.0.0.0:*                                             

udp    UNCONN  0       0                     *:7946                *:*      users:(("dockerd",pid=3290,fd=50))     

tcp    LISTEN  0       128             0.0.0.0:8000          0.0.0.0:*      users:(("docker-proxy",pid=3504,fd=4)) 

tcp    LISTEN  0       128             0.0.0.0:22            0.0.0.0:*      users:(("sshd",pid=941,fd=4))          

tcp    LISTEN  0       128                [::]:8000             [::]:*      users:(("docker-proxy",pid=3510,fd=4)) 

tcp    LISTEN  0       128                   *:2377                *:*      users:(("dockerd",pid=3290,fd=43))     

tcp    LISTEN  0       128                   *:7946                *:*      users:(("dockerd",pid=3290,fd=48))     

tcp    LISTEN  0       128                   *:8020                *:*      users:(("dockerd",pid=3290,fd=67))     

tcp    LISTEN  0       128                [::]:22               [::]:*      users:(("sshd",pid=941,fd=6))          

[root@docker-manager-1 ~]#

鏡像的滾動升級操作

滾動升級

先停一個舊的nginx容器,馬上啟動一個新版本的容器,

eg:nginx:1.19.10 ---> nginx:1.21.1

先啟動一個舊版本nginx

[root@docker-manager-1 ~]# docker service create --replicas 10 --name chao-web -p 8021:80 nginx:1.19.10

7y02cykjtrfkea7x8djvj2u4v

overall progress: 10 out of 10 tasks

1/10: running   [==================================================>]

2/10: running   [==================================================>]

3/10: running   [==================================================>]

4/10: running   [==================================================>]

5/10: running   [==================================================>]

6/10: running   [==================================================>]

7/10: running   [==================================================>]

8/10: running   [==================================================>]

9/10: running   [==================================================>]

10/10: running   [==================================================>]

verify: Service converged

[root@docker-manager-1 ~]#

進行滾動升級

命令:docker service update --image nginxlatest chao-web(容器名)

[root@docker-manager-1 ~]# docker service update --image nginx:latest chao-web

image nginx:latest could not be accessed on a registry to record

its digest. Each node will access nginx:latest independently,

possibly leading to different nodes running different

versions of the image.

 
chao-web

overall progress: 10 out of 10 tasks

1/10: running   [==================================================>]

2/10: running   [==================================================>]

3/10: running   [==================================================>]

4/10: running   [==================================================>]

5/10: running   [==================================================>]

6/10: running   [==================================================>]

7/10: running   [==================================================>]

8/10: running   [==================================================>]

9/10: running   [==================================================>]

10/10: running   [==================================================>]

verify: Service converged

[root@docker-manager-1 ~]#

結合compose和swarm進行多服務的編排

compose和swarm結合有什么優勢

優勢:compose和swarm結合可以實作優勢互補,通過compose可以對一臺服務器同時啟動多個容器,而swarm可以對多臺服務器進行管理,二者結合可以實作多臺服務器的多容器啟動,

代碼實體部署

1.創建swarm目錄

[root@docker-manager-1 ~]# mkdir /lianxi/swarm

[root@docker-manager-1 ~]# cd /lianxi/swarm/

[root@docker-manager-1 swarm]# ls

[root@docker-manager-1 swarm]#

2.撰寫docker-compose.yml檔案,設定要啟動的容器的鏡像

[root@docker-manager-1 swarm]# vim docker-compose.yml

[root@docker-manager-1 swarm]# ls

docker-compose.yml

[root@docker-manager-1 swarm]# cat docker-compose.yml

version: "3"

services:

  chao-nginx:

    image: nginx

    ports:

      - 8023:80

    deploy:

      mode: replicated

      replicas: 10

  chao-redis:

    image: redis

    ports:

      - 8024:6379

    deploy:

      mode: replicated

      replicas: 6

 

[root@docker-manager-1 swarm]#

3.通過這個yml檔案部署服務

命令:docker stack deploy -c docker-compose.yml deploy_deamon

[root@docker-manager-1 swarm]# docker stack deploy -c docker-compose.yml deploy_deamon

Creating network deploy_deamon_default

Creating service deploy_deamon_chao-redis

Creating service deploy_deamon_chao-nginx

[root@docker-manager-1 swarm]#

4.查看創建的服務

[root@docker-manager-1 swarm]# docker stack ls

NAME            SERVICES   ORCHESTRATOR

deploy_deamon   2          Swarm

[root@docker-manager-1 swarm]# docker service ls

ID             NAME                       MODE         REPLICAS   IMAGE          PORTS

7y02cykjtrfk   chao-web                   replicated   10/10      nginx:latest   *:8021->80/tcp

m2g64m8uhovj   deploy_deamon_chao-nginx   replicated   10/10      nginx:latest   *:8023->80/tcp

3svlxmkhnubn   deploy_deamon_chao-redis   replicated   6/6        redis:latest   *:8024->6379/tcp

[root@docker-manager-1 swarm]#

Swarm中使用Volume

1.創建volume

[root@docker-manager-1 chaochao]# docker volume create chao-swarm

chao-swarm

[root@docker-manager-1 chaochao]# docker volume ls

DRIVER    VOLUME NAME

local     chao-nginx-volume-1

local     chao-swarm

local     chaochao

local     dcdc1c404a7f25ccbbfaa29b941b2c95645e4bce5fbba73b455e842d46aac4fe

local     fc4ee6067682c0cc7e19c9367c57e8822f460c49f845ad68768e6e94786c2c8e

local     lizhichao

local     my_wordpress_db_data

local     my_wordpress_wordpress_data

[root@docker-manager-1 chaochao]# cd /var/lib/docker/volumes/chao-swarm/_data

[root@docker-manager-1 _data]# cp /web/* .

cp:是否覆寫'./1.jpg'? y

cp:是否覆寫'./index.html'? y

cp:是否覆寫'./rep.html'? y

[root@docker-manager-1 _data]# ls

1.jpg  50x.html  index.html  rep.html

2.創建新的服務并掛載volume(nginx為例)

命令:docker service create --replicas 10 --mount type=volume,src=chao-swarm,dst=/usr/share/nginx/html --name chao-swarm-volume -p 8025:80 nginx

[root@docker-manager-1 _data]# docker service create --replicas 10 --mount type=volume,src=chao-swarm,dst=/usr/share/nginx/html --name chao-swarm-volume -p 8025:80 nginx

image nginx:latest could not be accessed on a registry to record

its digest. Each node will access nginx:latest independently,

possibly leading to different nodes running different

versions of the image.

 

kaxx41zrrwv72d5c2fqokpr6h

overall progress: 10 out of 10 tasks

1/10: running   [==================================================>]

2/10: running   [==================================================>]

3/10: running   [==================================================>]

4/10: running   [==================================================>]

5/10: running   [==================================================>]

6/10: running   [==================================================>]

7/10: running   [==================================================>]

8/10: running   [==================================================>]

9/10: running   [==================================================>]

10/10: running   [==================================================>]

verify: Service converged

[root@docker-manager-1 _data]# docker service ls

ID             NAME                       MODE         REPLICAS   IMAGE          PORTS

kaxx41zrrwv7   chao-swarm-volume          replicated   10/10      nginx:latest   *:8025->80/tcp

7y02cykjtrfk   chao-web                   replicated   10/10      nginx:latest   *:8021->80/tcp

m2g64m8uhovj   deploy_deamon_chao-nginx   replicated   10/10      nginx:latest   *:8023->80/tcp

3svlxmkhnubn   deploy_deamon_chao-redis   replicated   6/6        redis:latest   *:8024->6379/tcp

[root@docker-manager-1 _data]# docker service ps chao-swarm-volume

ID             NAME                   IMAGE          NODE               DESIRED STATE   CURRENT STATE            ERROR     PORTS

jl8zorwqpwu1   chao-swarm-volume.1    nginx:latest   docker-3           Running         Running 32 seconds ago            

qpkhrrcyeacx   chao-swarm-volume.2    nginx:latest   chaochao           Running         Running 35 seconds ago            

jdmmuem72q57   chao-swarm-volume.3    nginx:latest   docker-3           Running         Running 33 seconds ago            

rv2zplpvz82v   chao-swarm-volume.4    nginx:latest   docker-manager-1   Running         Running 34 seconds ago            

0l4switts1y8   chao-swarm-volume.5    nginx:latest   chaochao           Running         Running 35 seconds ago            

ru5thcx6afxw   chao-swarm-volume.6    nginx:latest   docker-manager-1   Running         Running 34 seconds ago            

aq2v3e4iv470   chao-swarm-volume.7    nginx:latest   docker-2           Running         Running 35 seconds ago            

rst6zeszjs9p   chao-swarm-volume.8    nginx:latest   docker-2           Running         Running 33 seconds ago            

qtr7et4tkimr   chao-swarm-volume.9    nginx:latest   chaochao           Running         Running 36 seconds ago            

z4a3uu3elgey   chao-swarm-volume.10   nginx:latest   docker-2           Running         Running 33 seconds ago            

[root@docker-manager-1 _data]#

3.查看nginx服務

問題:如何解決web服務的網頁保持一致?

通過NFS服務和volume來解決,下期講解!

創作不易,客官點個贊,評論一下吧!超超和你一起加油?😜

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/296797.html

標籤:其他

上一篇:##超細##Java JVM調優篇

下一篇:JVM記憶體布局

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more