我們上面使用swarm部署服務,單個服務還好,如果很多個服務怎麼來解決呢,這裡就用到了Docker Stack管理服務。 在上面我們學會瞭如何配置一個swarm集群,並且知道如何在swarm集群上部署應用,現在,我們開始瞭解Docker層級關係中的最高一個層級——stack。一個stack就是一 ...
我們上面使用
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
查看服務部署情況
本文由
傳智教育博學谷
教研團隊發佈。如果本文對您有幫助,歡迎
關註
和點贊
;如果您有任何建議也可留言評論
或私信
,您的支持是我堅持創作的動力。轉載請註明出處!