如果你還沒玩過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
  • Timer是什麼 Timer 是一種用於創建定期粒度行為的機制。 與標準的 .NET System.Threading.Timer 類相似,Orleans 的 Timer 允許在一段時間後執行特定的操作,或者在特定的時間間隔內重覆執行操作。 它在分散式系統中具有重要作用,特別是在處理需要周期性執行的 ...
  • 前言 相信很多做WPF開發的小伙伴都遇到過表格類的需求,雖然現有的Grid控制項也能實現,但是使用起來的體驗感並不好,比如要實現一個Excel中的表格效果,估計你能想到的第一個方法就是套Border控制項,用這種方法你需要控制每個Border的邊框,並且在一堆Bordr中找到Grid.Row,Grid. ...
  • .NET C#程式啟動閃退,目錄導致的問題 這是第2次踩這個坑了,很小的編程細節,容易忽略,所以寫個博客,分享給大家。 1.第一次坑:是windows 系統把程式運行成服務,找不到配置文件,原因是以服務運行它的工作目錄是在C:\Windows\System32 2.本次坑:WPF桌面程式通過註冊表設 ...
  • 在分散式系統中,數據的持久化是至關重要的一環。 Orleans 7 引入了強大的持久化功能,使得在分散式環境下管理數據變得更加輕鬆和可靠。 本文將介紹什麼是 Orleans 7 的持久化,如何設置它以及相應的代碼示例。 什麼是 Orleans 7 的持久化? Orleans 7 的持久化是指將 Or ...
  • 前言 .NET Feature Management 是一個用於管理應用程式功能的庫,它可以幫助開發人員在應用程式中輕鬆地添加、移除和管理功能。使用 Feature Management,開發人員可以根據不同用戶、環境或其他條件來動態地控制應用程式中的功能。這使得開發人員可以更靈活地管理應用程式的功 ...
  • 在 WPF 應用程式中,拖放操作是實現用戶交互的重要組成部分。通過拖放操作,用戶可以輕鬆地將數據從一個位置移動到另一個位置,或者將控制項從一個容器移動到另一個容器。然而,WPF 中預設的拖放操作可能並不是那麼好用。為瞭解決這個問題,我們可以自定義一個 Panel 來實現更簡單的拖拽操作。 自定義 Pa ...
  • 在實際使用中,由於涉及到不同編程語言之間互相調用,導致C++ 中的OpenCV與C#中的OpenCvSharp 圖像數據在不同編程語言之間難以有效傳遞。在本文中我們將結合OpenCvSharp源碼實現原理,探究兩種數據之間的通信方式。 ...
  • 一、前言 這是一篇搭建許可權管理系統的系列文章。 隨著網路的發展,信息安全對應任何企業來說都越發的重要,而本系列文章將和大家一起一步一步搭建一個全新的許可權管理系統。 說明:由於搭建一個全新的項目過於繁瑣,所有作者將挑選核心代碼和核心思路進行分享。 二、技術選擇 三、開始設計 1、自主搭建vue前端和. ...
  • Csharper中的表達式樹 這節課來瞭解一下表示式樹是什麼? 在C#中,表達式樹是一種數據結構,它可以表示一些代碼塊,如Lambda表達式或查詢表達式。表達式樹使你能夠查看和操作數據,就像你可以查看和操作代碼一樣。它們通常用於創建動態查詢和解析表達式。 一、認識表達式樹 為什麼要這樣說?它和委托有 ...
  • 在使用Django等框架來操作MySQL時,實際上底層還是通過Python來操作的,首先需要安裝一個驅動程式,在Python3中,驅動程式有多種選擇,比如有pymysql以及mysqlclient等。使用pip命令安裝mysqlclient失敗應如何解決? 安裝的python版本說明 機器同時安裝了 ...