如果你還沒玩過Docker Stack管理服務,你已經out了,(送Portainer集群管理教程)

来源:https://www.cnblogs.com/jiagooushi/archive/2022/09/07/16665640.html
-Advertisement-
Play Games

我們上面使用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。

file

查看部署情況

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

file

服務部署情況
查看nacos節點信息

訪問nacos服務,發現我們的服務都已經註冊

file

測試訪問服務

訪問服務介面測試

curl http://192.168.64.153:8888/employeapi/find/10001| python -m json.tool

file

集群管理

更新服務

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

file

刪除應用
查看部署集群

docker stack ls可以查看部署的服務列表

file

執行刪除

docker stack rm stack名稱命令會刪除整個stack集群,註意移除操作執行前並不會進行二次確認。

docker stack rm learn-docker-test

file

相關命令(手冊)
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代理作為全局服務部署到集群中的每個節點上。

file

portainer使用

註冊用戶

預設訪問介面是9000埠,可以通過瀏覽器進行訪問,首次登陸需要註冊用戶,給admin用戶設置密碼

file

查看管理服務

點擊home節點,當前這個節點就是我們的swarm集群

file

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

file

查看swarm節點

點擊swarm菜單就可以看到swarm節點了

file

管理微服務

服務部署情況

我們要將我們的服務交給portainer管理

服務名稱 數量
mysql 1
nacos 1
learn-docker-gateway 1
learn-docker-web 2
learn-docker-storage 2
準備工作
管理節點標簽

我們MySQL需要部署在數據節點,我們添加節點標簽

file

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

file

添加網路信息

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

file

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

file

然後點擊創建就可以

創建倉庫配置

因為我們的微服務需要從我們自己的harbor鏡像倉庫拉取,需要將我們的倉庫配置

file

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

file

創建stack任務

在stack界面點擊stack菜單進行添加stck任務

file

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

file

點擊創建節點信息就可以,等待部署就可以

file

稍等下節點就部署完成了

file

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

file

查看節點部署情況

進入swarm管理界面

file

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

file

本文由傳智教育博學谷教研團隊發佈。

如果本文對您有幫助,歡迎關註點贊;如果您有任何建議也可留言評論私信,您的支持是我堅持創作的動力。

轉載請註明出處!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 說明 這是關於Qt5(Qt5.1.4.2),QWidget編程使用Qt虛擬鍵盤(qtvirtualkeyboard) Tag: QT5,Qt,軟體盤、虛擬鍵盤,Widget程式,QML 作者:[email protected] 關鍵代碼 啟用虛擬鍵盤模塊 在QApplication對象創建之前插入代碼 ...
  • JavaGUI-坦克大戰04 7.線程的應用03 7.3坦克大戰4.0版 7.3.4功能3:敵方坦克自由移動 功能3:讓敵人的坦克也可以自由隨機地上下左右移動 思路: 因為要求敵人的坦克自由移動,因此需要將敵人坦克當做線程使用,EnemyTank類實現Runnable介面 線程的run方法的具體操作 ...
  • JavaGUI-坦克大戰03-2 7.線程的應用02 7.3.坦克大戰4.0版 坦克大戰4.0版 增加功能: 功能1.讓敵人的坦克也能夠發射子彈(可以有多個子彈) 功能2.當我方坦克集中敵人坦克時,敵人的坦克就消失,如果能做出爆炸的效果更好 功能3.讓敵人的坦克也可以自由隨機地上下左右移動 功能4. ...
  • 1.什麼是模板層 模板層可以根據視圖中傳遞的字典數據動態生產相應的HTML頁面 2.模板層的配置 1.在項目下創建一個與同名文件夾平行的templates文件夾 2.在settings.py中的TEMPLATES配置項中 BACKEND:指定模板的引擎 DIRS:模板的搜索目錄(可以是一個或者多個) ...
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 最近在研究一個基於TP6的框架CRMEB,這裡分享下我的開發心得 首先要獲取原始項目文件 這裡是git地址 https://gitee.com/ZhongBangKeJi/CRMEB.git 項目環境的要求為Apache、MySQL、PH ...
  • 命令版 示例: 將main分支轉到master分支上 切到需要使用的分支 git checkout master 強制忽略歷史融合 git merge main --allow-unrelated-histories 3.提交融合衝突文件即可 ...
  • Django_ajax 1 簡介 AJAX(Asynchronous Javascript And XML)翻譯成中文就是“非同步Javascript和XML”。即使用Javascript語言與伺服器進行非同步交互,傳輸的數據為XML(當然,傳輸的數據不只是XML)。 同步交互:客戶端發出一個請求後,需 ...
  • 作用域 作用域分為: 全局作用域 局部作用域 在函數內部的作用域叫做局部作用域,局部作用域中的變數叫做局部變數 非函數內部的作用域叫做全局作用域,全局作用域中的變數叫做全局變數 局部作用域可以使用全局變數,全局變數不能試用局部變數 變數的使用規則: 從內向外,找到後返回 函數作用域中命名全局變數gl ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...