主頁 > 後端開發 > 如果你還沒玩過Docker Stack管理服務,你已經out了,(送Portainer集群管理教程)

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

2022-09-08 08:36:46 後端開發

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

本文由傳智教育博學谷教研團隊發布,

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

轉載請注明出處!

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

標籤:其他

上一篇:【金九銀十必問面試題】站在架構師角度分析問題,如何解決TCC中的懸掛問題

下一篇:python 作用域與命名空間

標籤雲
其他(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)

熱門瀏覽
  • 【C++】Microsoft C++、C 和匯編程式檔案

    ......

    uj5u.com 2020-09-10 00:57:23 more
  • 例外宣告

    相比于斷言適用于排除邏輯上不可能存在的狀態,例外通常是用于邏輯上可能發生的錯誤。 例外宣告 Item 1:當函式不可能拋出例外或不能接受拋出例外時,使用noexcept 理由 如果不打算拋出例外的話,程式就會認為無法處理這種錯誤,并且應當盡早終止,如此可以有效地阻止例外的傳播與擴散。 示例 //不可 ......

    uj5u.com 2020-09-10 00:57:27 more
  • Codeforces 1400E Clear the Multiset(貪心 + 分治)

    鏈接:https://codeforces.com/problemset/problem/1400/E 來源:Codeforces 思路:給你一個陣列,現在你可以進行兩種操作,操作1:將一段沒有 0 的區間進行減一的操作,操作2:將 i 位置上的元素歸零。最終問:將這個陣列的全部元素歸零后操作的最少 ......

    uj5u.com 2020-09-10 00:57:30 more
  • UVA11610 【Reverse Prime】

    本人看到此題沒有翻譯,就附帶了一個自己的翻譯版本 思考 這一題,它的第一個要求是找出所有 $7$ 位反向質數及其質因數的個數。 我們應該需要質數篩篩選1~$10^{7}$的所有數,這里就不慢慢介紹了。但是,重讀題,我們突然發現反向質數都是 $7$ 位,而將它反過來后的數字卻是 $6$ 位數,這就說明 ......

    uj5u.com 2020-09-10 00:57:36 more
  • 統計區間素數數量

    1 #pragma GCC optimize(2) 2 #include <bits/stdc++.h> 3 using namespace std; 4 bool isprime[1000000010]; 5 vector<int> prime; 6 inline int getlist(int ......

    uj5u.com 2020-09-10 00:57:47 more
  • C/C++編程筆記:C++中的 const 變數詳解,教你正確認識const用法

    1、C中的const 1、區域const變數存放在堆疊區中,會分配記憶體(也就是說可以通過地址間接修改變數的值)。測驗代碼如下: 運行結果: 2、全域const變數存放在只讀資料段(不能通過地址修改,會發生寫入錯誤), 默認為外部聯編,可以給其他源檔案使用(需要用extern關鍵字修飾) 運行結果: ......

    uj5u.com 2020-09-10 00:58:04 more
  • 【C++犯錯記錄】VS2019 MFC添加資源不懂如何修改資源宏ID

    1. 首先在資源視圖中,添加資源 2. 點擊新添加的資源,復制自動生成的ID 3. 在解決方案資源管理器中找到Resource.h檔案,編輯,使用整個專案搜索和替換的方式快速替換 宏宣告 4. Ctrl+Shift+F 全域搜索,點擊查找全部,然后逐個替換 5. 為什么使用搜索替換而不使用屬性視窗直 ......

    uj5u.com 2020-09-10 00:59:11 more
  • 【C++犯錯記錄】VS2019 MFC不懂的批量添加資源

    1. 打開資源頭檔案Resource.h,在其中預先定義好宏 ID(不清楚其實ID值應該設定多少,可以先新建一個相同的資源項,再在這個資源的ID值的基礎上遞增即可) 2. 在資源視圖中選中專案資源,按F7編輯資源檔案,按 ID 型別 相對路徑的形式添加 資源。(別忘了先把檔案拷貝到專案中的res檔案 ......

    uj5u.com 2020-09-10 01:00:19 more
  • C/C++編程筆記:關于C++的參考型別,專供新手入門使用

    今天要講的是C++中我最喜歡的一個用法——參考,也叫別名。 參考就是給一個變數名取一個變數名,方便我們間接地使用這個變數。我們可以給一個變數創建N個參考,這N + 1個變數共享了同一塊記憶體區域。(參考型別的變數會占用記憶體空間,占用的記憶體空間的大小和指標型別的大小是相同的。雖然參考是一個物件的別名,但 ......

    uj5u.com 2020-09-10 01:00:22 more
  • 【C/C++編程筆記】從頭開始學習C ++:初學者完整指南

    眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......

    uj5u.com 2020-09-10 01:00:41 more
最新发布
  • Rust中的智能指標:Box<T> Rc<T> Arc<T> Cell<T> RefCell<T> Weak

    Rust中的智能指標是什么 智能指標(smart pointers)是一類資料結構,是擁有資料所有權和額外功能的指標。是指標的進一步發展 指標(pointer)是一個包含記憶體地址的變數的通用概念。這個地址參考,或 ” 指向”(points at)一些其 他資料 。參考以 & 符號為標志并借用了他們所 ......

    uj5u.com 2023-04-20 07:24:10 more
  • Java的值傳遞和參考傳遞

    值傳遞不會改變本身,參考傳遞(如果傳遞的值需要實體化到堆里)如果發生修改了會改變本身。 1.基本資料型別都是值傳遞 package com.example.basic; public class Test { public static void main(String[] args) { int ......

    uj5u.com 2023-04-20 07:24:04 more
  • [2]SpinalHDL教程——Scala簡單入門

    第一個 Scala 程式 shell里面輸入 $ scala scala> 1 + 1 res0: Int = 2 scala> println("Hello World!") Hello World! 檔案形式 object HelloWorld { /* 這是我的第一個 Scala 程式 * 以 ......

    uj5u.com 2023-04-20 07:23:58 more
  • 理解函式指標和回呼函式

    理解 函式指標 指向函式的指標。比如: 理解函式指標的偽代碼 void (*p)(int type, char *data); // 定義一個函式指標p void func(int type, char *data); // 宣告一個函式func p = func; // 將指標p指向函式func ......

    uj5u.com 2023-04-20 07:23:52 more
  • Django筆記二十五之資料庫函式之日期函式

    本文首發于公眾號:Hunter后端 原文鏈接:Django筆記二十五之資料庫函式之日期函式 日期函式主要介紹兩個大類,Extract() 和 Trunc() Extract() 函式作用是提取日期,比如我們可以提取一個日期欄位的年份,月份,日等資料 Trunc() 的作用則是截取,比如 2022-0 ......

    uj5u.com 2023-04-20 07:23:45 more
  • 一天吃透JVM面試八股文

    什么是JVM? JVM,全稱Java Virtual Machine(Java虛擬機),是通過在實際的計算機上仿真模擬各種計算機功能來實作的。由一套位元組碼指令集、一組暫存器、一個堆疊、一個垃圾回收堆和一個存盤方法域等組成。JVM屏蔽了與作業系統平臺相關的資訊,使得Java程式只需要生成在Java虛擬機 ......

    uj5u.com 2023-04-20 07:23:31 more
  • 使用Java接入小程式訂閱訊息!

    更新完微信服務號的模板訊息之后,我又趕緊把微信小程式的訂閱訊息給實作了!之前我一直以為微信小程式也是要企業才能申請,沒想到小程式個人就能申請。 訊息推送平臺🔥推送下發【郵件】【短信】【微信服務號】【微信小程式】【企業微信】【釘釘】等訊息型別。 https://gitee.com/zhongfuch ......

    uj5u.com 2023-04-20 07:22:59 more
  • java -- 緩沖流、轉換流、序列化流

    緩沖流 緩沖流, 也叫高效流, 按照資料型別分類: 位元組緩沖流:BufferedInputStream,BufferedOutputStream 字符緩沖流:BufferedReader,BufferedWriter 緩沖流的基本原理,是在創建流物件時,會創建一個內置的默認大小的緩沖區陣列,通過緩沖 ......

    uj5u.com 2023-04-20 07:22:49 more
  • Java-SpringBoot-Range請求頭設定實作視頻分段傳輸

    老實說,人太懶了,現在基本都不喜歡寫筆記了,但是網上有關Range請求頭的文章都太水了 下面是抄的一段StackOverflow的代碼...自己大修改過的,寫的注釋挺全的,應該直接看得懂,就不解釋了 寫的不好...只是希望能給視頻網站開發的新手一點點幫助吧. 業務場景:視頻分段傳輸、視頻多段傳輸(理 ......

    uj5u.com 2023-04-20 07:22:42 more
  • Windows 10開發教程_編程入門自學教程_菜鳥教程-免費教程分享

    教程簡介 Windows 10開發入門教程 - 從簡單的步驟了解Windows 10開發,從基本到高級概念,包括簡介,UWP,第一個應用程式,商店,XAML控制元件,資料系結,XAML性能,自適應設計,自適應UI,自適應代碼,檔案管理,SQLite資料庫,應用程式到應用程式通信,應用程式本地化,應用程式 ......

    uj5u.com 2023-04-20 07:22:35 more