我們上面使用
swarm部署服務,單個服務還好,如果很多個服務怎么來解決呢,這里就用到了Docker Stack管理服務,
? 在上面我們學會了如何配置一個swarm集群,并且知道如何在swarm集群上部署應用,現在,我們開始了解Docker層級關系中的最高一個層級——stack,一個stack就是一組有關聯的服務的組合,可以編排在一起,一起管理,
? 單機模式下,我們可以使用 Docker-Compose來編排多個服務,而 Docker Swarm 只能實作對單個服務的簡單部署,于是就引出了本文的主角 Docker Stack ,通過 Docker Stack 我們只需對已有的 docker-compose.yml 組態檔稍加改造就可以完成 Docker 集群環境下的多服務編排,
集群搭建案例
應用部署情況
| 服務名稱 | 數量 |
|---|---|
| mysql | 1 |
| nacos | 1 |
| learn-docker-gateway | 1 |
| learn-docker-web | 2 |
| learn-docker-storage | 2 |
創建docker-compose.yml
首先創建一個 docker-compose.yml 檔案,使用 Docker Compose v3 語法
我們把我們原來單機版的
docker-compose.yml改造以下
version: '3.9'
services:
mysql:
image: mysql:5.7.33
networks:
- learn-docker-network
volumes:
- "/tmp/etc/mysql:/etc/mysql/mysql.conf.d/"
- "/tmp/data/mysql:/var/lib/mysql"
environment:
MYSQL_ROOT_PASSWORD: 'root'
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- 'node.labels.role == data'
restart_policy:
condition: on-failure
delay: 5s
nacos:
image: nacos/nacos-server
ports:
- "8848:8848"
networks:
- learn-docker-network
environment:
MODE: 'standalone'
JVM_XMS: '128m'
JVM_XMX: '128m'
deploy:
mode: replicated
replicas: 1
restart_policy:
condition: on-failure
delay: 5s
learn-docker-web:
image: manager-hongbaoyu-java.itheima.net:8443/library/learn-docker-web:1.0-SNAPSHOT
networks:
- learn-docker-network
depends_on:
- nacos
- mysql
deploy:
mode: replicated
replicas: 2
restart_policy:
condition: on-failure
delay: 5s
learn-docker-storage:
image: manager-hongbaoyu-java.itheima.net:8443/library/learn-docker-storage:1.0-SNAPSHOT
networks:
- learn-docker-network
depends_on:
- nacos
- mysql
deploy:
mode: replicated
replicas: 2
restart_policy:
condition: on-failure
delay: 5s
learn-docker-gateway:
image: manager-hongbaoyu-java.itheima.net:8443/library/learn-docker-gateway:1.0-SNAPSHOT
ports:
- "8888:8888"
networks:
- learn-docker-network
depends_on:
- nacos
- mysql
deploy:
mode: replicated
replicas: 1
restart_policy:
condition: on-failure
delay: 5s
visualizer:
image: dockersamples/visualizer
ports:
- "8080:8080"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
deploy:
mode: replicated
replicas: 1
restart_policy:
condition: on-failure
delay: 5s
networks:
learn-docker-network:
driver: overlay
配置介紹
? Stack檔案就是Docker Compose檔案,唯一的要求就是version:一項需要是3.0或者更高的值,在Docker根據某個Stack檔案部署應用的時候,首先會檢查并創建networks:關鍵字對應網路,如果網路不存在,Docker會進行創建,下面我們詳細看下這幾個模塊,
overlay網路
? 這里定義了1個網路,默認情況下網路都是使用overlay驅動,新建對應的覆寫型別的網路,
networks:
learn-docker-network:
driver: overlay
部署節點副本數
接下來我們進一步了解deploy關鍵字新增的內容
deploy:
mode: replicated
replicas: 2
restart_policy:
condition: on-failure
delay: 5s
- replicas: 2 設定了期望服務的副本數量為2,默認為1.如果服務正在運行,需要調整副本數,可以調整stack檔案中的 replicas 的數值,然后重新部署stack,重新部署stack并不會影響那些沒有改動的服務,
- restart_policy: 定義了Swarm針對容器例外退出的重啟策略,當前服務的重啟策略是:如果某個副本以非0回傳值退出,會立即重啟當前副本,重啟最多嘗試3次,每次都是等待之多120s來檢測是否成功,每次重啟的間隔是5s,
節點約束
因為我們的資料庫節點只能部署在資料節點,因為需要掛載本地的資料檔案以及資料庫檔案,所有需要使用標簽進行節點約束
mysql:
image: mysql:5.7.33
networks:
- learn-docker-network
volumes:
- "/tmp/etc/mysql:/etc/mysql/mysql.conf.d/"
- "/tmp/data/mysql:/var/lib/mysql"
environment:
MYSQL_ROOT_PASSWORD: 'root'
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- 'node.labels.role == data'
restart_policy:
condition: on-failure
delay: 5s
這里的
'node.labels.role == data含義就是將當前mysql節點約束在標簽名字是role,并且值是data的資料節點,更多操作請參考下文
部署服務
部署應用
使用docker stack deploy 命令部署
docker stack deploy -c docker-compose.yml learn-docker-test
這里我們指定了docker-compose檔案,并把stack命名為 learn-docker-test,

查看部署情況
可以通過
docker stack ls命令查看集群部署情況,會列出 Swarm 集群中的全部 Stack,包括每個 Stack 擁有多少服務

服務部署情況
查看nacos節點資訊
訪問nacos服務,發現我們的服務都已經注冊

測驗訪問服務
訪問服務介面測驗
curl http://192.168.64.153:8888/employeapi/find/10001| python -m json.tool

集群管理
更新服務
docker service upadte可以對swarm服務進行升級
引數詳解
-
--force 強制更新重啟服務,無論是否配置或鏡像改變都更新
-
--image <image:tag> 制定更新的鏡像
-
--with-registry-auth 向 Swarm 代理發送 Registry 認證詳細資訊,私有倉庫需要攜帶該引數
更新鏡像
#查看服務詳情
docker service ls
# 更新服務
docker service update --image manager-hongbaoyu-java.itheima.net:8443/library/learn-docker-storage:1.0-SNAPSHOT learn-docker-test_learn-docker-storage

洗掉應用
查看部署集群
docker stack ls可以查看部署的服務串列

執行洗掉
docker stack rm stack名稱命令會洗掉整個stack集群,注意移除操作執行前并不會進行二次確認,
docker stack rm learn-docker-test

相關命令(手冊)
docker stack 常用命令
| 命令 | 說明 |
|---|---|
| docker stack deploy | 部署新的堆疊或更新現有堆疊 |
| docker stack ls | 列出現有堆疊 |
| docker stack ps | 列出堆疊中的任務 |
| docker stack rm | 洗掉堆疊 |
| docker stack services | 列出堆疊中的服務 |
| docker stack down | 移除某個堆疊(不會洗掉資料) |
docker service 常用命令
| 命令 | 說明 |
|---|---|
| docker service create | 部署服務 |
| docker service inspect | 查看服務詳情 |
| docker service logs | 產看某個服務日志 |
| docker service ls | 查看所有服務詳情 |
| docker service rm | 洗掉某個服務(-f強制洗掉) |
| docker service scale | 設定某個服務個數 |
| docker service update | 更新某個服務 |
docker node 常用命令
| 命令 | 說明 |
|---|---|
| docker node ls | 查看所有集群節點 |
| docker node rm | 洗掉某個節點(-f強制洗掉) |
| docker node inspect | 查看節點詳情 |
| docker node demote | 節點降級,由管理節點降級為作業節點 |
| docker node promote | 節點升級,由作業節點升級為管理節點 |
| docker node update | 更新節點 |
| docker node ps | 查看節點中的 Task 任務 |
docker swarm 常用命令
| 命令 | 說明 |
|---|---|
| docker swarm init | 初始化集群 |
| docker swarm join-token worker | 查看作業節點的 token |
| docker swarm join-token manager | 查看管理節點的 token |
| docker swarm join | 加入集群中 |
portainer集群管理(擴展)
Portainer介紹
Portainer是一個可視化的容器鏡像的圖形管理工具,利用Portainer可以輕松構建,管理和維護Docker環境, 而且完全免費,基于容器化的安裝方式,方便高效部署,
? Portainer 的目的是部署和使用一樣簡單,它由一個可以在任何 Docker 引擎上運行的單一容器組成(可以部署為Linux容器或Windows本地容器,也支持其他平臺),Portainer允許你管理所有的Docker資源(容器、鏡像、卷、網路等等),它與獨立的Docker引擎和Docker Swarm模式兼容,
swarm集群安裝Portainer
使用swarm集群安裝Portainer,用Portainer來管理swarm集群
# 下載部署組態檔
curl -L https://downloads.portainer.io/portainer-agent-stack.yml -o portainer-agent-stack.yml
# 部署節點
docker stack deploy -c portainer-agent-stack.yml portainer
注意:此方法將自動部署Portainer服務器的單個實體,并將Portainer代理作為全域服務部署到集群中的每個節點上,

portainer使用
注冊用戶
默認訪問介面是9000埠,可以通過瀏覽器進行訪問,首次登陸需要注冊用戶,給admin用戶設定密碼

查看管理服務
點擊home節點,當前這個節點就是我們的swarm集群

點進去就可以看到我們能操作的選單了

查看swarm節點
點擊swarm選單就可以看到swarm節點了

管理微服務
服務部署情況
我們要將我們的服務交給portainer管理
| 服務名稱 | 數量 |
|---|---|
| mysql | 1 |
| nacos | 1 |
| learn-docker-gateway | 1 |
| learn-docker-web | 2 |
| learn-docker-storage | 2 |
準備作業
管理節點標簽
我們MySQL需要部署在資料節點,我們添加節點標簽

在swarm管理節點,點擊節點資訊進入下面詳情頁面進行配置標簽

添加網路資訊
因為我們的節點需要一個共有的
overlay網路,我們需要配置下,在network節點點擊添加

在添加頁面選擇
overlay網路型別,名字叫做learn-docker-network

然后點擊創建就可以
創建倉庫配置
因為我們的微服務需要從我們自己的harbor鏡像倉庫拉取,需要將我們的倉庫配置

在倉庫節點填寫我們的鏡像地址就可以
https://manager-hongbaoyu-java.itheima.net:8443

創建stack任務
在stack界面點擊stack選單進行添加stck任務

在stack管理界面將我們的
docker-compose.yml復制進我們的stack界面

點擊創建節點資訊就可以,等待部署就可以

稍等下節點就部署完成了

點擊進去就可以單到節點詳情了

查看節點部署情況
進入swarm管理界面

點擊
Go to cluster visualizer查看服務部署情況

本文由
傳智教育博學谷教研團隊發布,如果本文對您有幫助,歡迎
關注和點贊;如果您有任何建議也可留言評論或私信,您的支持是我堅持創作的動力,轉載請注明出處!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/505474.html
標籤:其他
上一篇:【金九銀十必問面試題】站在架構師角度分析問題,如何解決TCC中的懸掛問題
下一篇:python 作用域與命名空間
