欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Docker swarm集群部署過程詳解(包含compose.yml文件詳情)

 更新時(shí)間:2025年07月18日 11:30:08   作者:佛說"獨(dú)"  
Docker Swarm是Docker的集群管理工具,支持服務(wù)部署、副本調(diào)度、Stack管理(基于Compose文件),包含初始化集群、節(jié)點(diǎn)添加、服務(wù)更新、資源清理等操作,確保容器化應(yīng)用的高效運(yùn)行,本文給大家介紹Docker swarm集群部署包含compose.yml文件詳情,感興趣的朋友一起看看吧

概述

Docker Swarm 是 Docker 的原生集群管理和編排工具,允許您將多個(gè) Docker 主機(jī)組合成一個(gè)虛擬的 Docker 主機(jī)來管理和部署容器。

角色IPHOSTNAME
Manager192.168.56.100manager1
worker192.168.56.101worker1
worker192.168.56.103worker2

docker swarm集群部署

1. 初始化swarm集群

[root@manager1 /]# docker swarm init --advertise-addr 192.168.56.100

1.1 查看令牌

#獲取worker(工作節(jié)點(diǎn))令牌
[root@manager1 /]# docker swarm join-token worker
#獲取manager(管理節(jié)點(diǎn))令牌
[root@manager1 /]# docker swarm join-token manager

1.2 生成新令牌

#生成新worker的token
[root@manager1 /]# docker swarm join-token --rotate worker

2. 添加工作節(jié)點(diǎn)

添加管理節(jié)點(diǎn)可以先通過 docker swarm join-token manager 命令獲取token,再進(jìn)行添加

復(fù)制初始化時(shí)獲取到的命令重新獲取添加工作節(jié)點(diǎn)的命令:

[root@manager1 /]# docker swarm join-token worker

在worker1和worker2服務(wù)器執(zhí)行以下命令:

[root@worker1 ~]# docker swarm join --token SWMTKN-1-123ku5t7znc2qyk3cp7drbglrgj62ite8g9x4ou7f8c68mxxyy-a06klulcrz5awwcmwkeooo70j 192.168.56.100:2377
[root@worker2 ~]# docker swarm join --token SWMTKN-1-123ku5t7znc2qyk3cp7drbglrgj62ite8g9x4ou7f8c68mxxyy-a06klulcrz5awwcmwkeooo70j 192.168.56.100:2377

3. 查看節(jié)點(diǎn)集群列表

[root@manager1 ~]# docker node ls

4. 查看的節(jié)點(diǎn)詳情

[root@manager1 /]# docker node inspect <HOSTNAME>

5. 退出集群

5.1 工作節(jié)點(diǎn)退出集群

在目標(biāo)服務(wù)器(worker1、worker2)中執(zhí)行下列命令:

[root@worker1 ~]# docker swarm leave

5.2 管理節(jié)點(diǎn)退出集群(需謹(jǐn)慎)

管理節(jié)點(diǎn)退出可能影響集群選舉(Raft協(xié)議),需額外處理:

  1. 降級(jí)為工作節(jié)點(diǎn)再退出(推薦)‌:
#先降級(jí)為工作節(jié)點(diǎn)?
[root@manager1 /]# docker node demote <節(jié)點(diǎn)ID>
#再執(zhí)行退出?
[root@manager1 /]# docker swarm leave
  1. 強(qiáng)制退出(風(fēng)險(xiǎn)較高)‌:
    若無法降級(jí)(如單管理節(jié)點(diǎn)集群),使用強(qiáng)制命令
#再執(zhí)行退出?
[root@manager1 /]# docker swarm leave --force

5.3 在管理節(jié)點(diǎn)中對(duì)剛才退出節(jié)點(diǎn)進(jìn)行刪除 ‌:

[root@manager1 /]# docker node rm 節(jié)點(diǎn)名稱|節(jié)點(diǎn)ID

docker service部署

核心作用‌:管理 ‌單個(gè)服務(wù)‌(如 Nginx、MySQL),負(fù)責(zé)副本調(diào)度、滾動(dòng)更新、健康檢查等操作

1. 部署服務(wù)

#命令會(huì)創(chuàng)建一個(gè)名為 my-nginx 的服務(wù),并在集群中運(yùn)行二個(gè)副本,映射到主機(jī)的80端口
[root@manager1 /]# docker service create --name my-nginx --replicas 2 -p 80:80 nginx

2. 更新服務(wù)配置 

[root@manager1 /]# docker service update --image nginx:alpine my-nginx
#強(qiáng)制更新my-nginx服務(wù),--force 參數(shù):強(qiáng)制更新服務(wù)
[root@manager1 /]# docker service update --force my-nginx

3. 查看集群中的服務(wù)

3.1 列出集群中運(yùn)行的所有服務(wù)

功能:查看當(dāng)前 Swarm 集群中所有正在運(yùn)行的服務(wù)的概覽信息(如服務(wù)名稱、副本數(shù)、鏡像等)。

[root@manager1 /]# docker service ls

關(guān)鍵字段說明

  • ID:服務(wù)的唯一標(biāo)識(shí)符。
  • NAME:服務(wù)名稱(用戶自定義)。
  • MODE:服務(wù)模式(replicated 副本模式,指定副本數(shù);global 全局模式,每個(gè)節(jié)點(diǎn)運(yùn)行一個(gè)副本)。
  • REPLICAS:當(dāng)前運(yùn)行的副本數(shù)/目標(biāo)副本數(shù)(如 3/3 表示所有副本正常運(yùn)行)。
  • IMAGE:服務(wù)使用的容器鏡像。
  • PORTS:服務(wù)暴露的端口映射(主機(jī)端口:容器端口)。

3.2 查看服務(wù)的任務(wù)(容器)運(yùn)行狀態(tài)

功能:查看某個(gè)服務(wù)的具體任務(wù)(Task,Swarm 中服務(wù)的實(shí)例)在集群節(jié)點(diǎn)上的分布和運(yùn)行狀態(tài)。

用法docker service ps <服務(wù)名或ID>

[root@manager1 /]# docker service ps my-nginx

關(guān)鍵字段說明

  • ID:任務(wù)的唯一標(biāo)識(shí)符。
  • NAME:任務(wù)名稱(格式:服務(wù)名.任務(wù)序號(hào),如 web.1 表示服務(wù) web 的第1個(gè)任務(wù))。
  • NODE:任務(wù)所在的 Swarm 節(jié)點(diǎn)。
  • DESIRED STATE:任務(wù)的期望狀態(tài)(如 Running 表示應(yīng)保持運(yùn)行)。
  • CURRENT STATE:任務(wù)的當(dāng)前實(shí)際狀態(tài)(如 RunningPreparing、Failed 等)。
  • ERROR:任務(wù)異常時(shí)的錯(cuò)誤信息(如啟動(dòng)失敗原因)。

3.3 查看服務(wù)的詳細(xì)配置信息

[root@manager1 /]# docker service inspect my-nginx

4. 擴(kuò)展服務(wù)的副本數(shù)量:

[root@manager1 /]# docker service scale my-nginx=3

5. 刪除服務(wù):

[root@manager1 /]# docker service rm my-nginx

docker stack部署

概述:Docker Stack 用于在 Swarm 集群上管理多容器應(yīng)用。它基于 Compose 文件定義應(yīng)用,并支持復(fù)雜的多服務(wù)部署。

1. 編寫 docker-compose.yml 文件:

#version: '3'
services:
  mysql:
    image: mysql:8.0.36
    environment:
      TZ: "Asia/Shanghai"
      MYSQL_ROOT_PASSWORD: 123456
    volumes:
      # 映射數(shù)據(jù)庫(kù)文件目錄
      - ./mysql/db:/var/lib/mysql 
      # 映射日志文件目錄
      - ./mysql/data/log:/data/log
      # 映射其他數(shù)據(jù)目錄
      - ./mysql/data/data:/data/data
      # 映射配置文件目錄
      - ./mysql/data/conf.d:/etc/mysql/conf.d
      # 映射文檔目錄
      - ./mysql/data/documents:/data/documents
      # 同步主機(jī)和容器的時(shí)間,只讀
      - /etc/localtime:/etc/localtime:ro
    ports:
      - 3306:3306
    deploy:
      #設(shè)置服務(wù)的運(yùn)行模式為 replicated,表示該服務(wù)將在多個(gè)節(jié)點(diǎn)上復(fù)制運(yùn)行
      mode: replicated
      #表示該服務(wù)將啟動(dòng) 2 個(gè)副本(即兩個(gè)容器實(shí)例)
      replicas: 2
      #給服務(wù)添加標(biāo)簽 APP=WEB,可以用于后續(xù)的服務(wù)篩選或管理
      labels: [MY=DB]
      resources: #定義服務(wù)使用的資源限制和預(yù)留
        limits:
          #每個(gè)容器最多使用 0.25 個(gè) CPU(即 25% 的 CPU 資源)
          cpus: '0.25'
          #每個(gè)容器最多使用 512MB 內(nèi)存
          memory: 512M
        reservations:
          #每個(gè)容器至少保證有 0.25 個(gè) CPU 可用
          cpus: '0.25'
          #每個(gè)容器至少保證有 256MB 內(nèi)存可用
          memory: 256M
      #重啟策略,管理容器‘非計(jì)劃退出'時(shí)的恢復(fù)(如進(jìn)程崩潰、資源不足)
      restart_policy:
        #只有當(dāng)容器失敗時(shí)才重啟
        condition: on-failure
        #每次重啟之間等待 5 秒
        delay: 5s
        #最多嘗試重啟 3 次
        max_attempts: 3
        #重啟次數(shù)統(tǒng)計(jì)的時(shí)間窗口為 120 秒
        window: 120s
      #更新策略,控制服務(wù)'主動(dòng)更新‘時(shí)的滾動(dòng)部署(如鏡像升級(jí))
      update_config:
        #每次更新一個(gè)副本
        parallelism: 1
        #每次更新之間等待 10 秒
        delay: 10s
        #監(jiān)控更新狀態(tài)的時(shí)間為 60 秒
        monitor: 60s
        #允許的最大失敗比率為 30%
        max_failure_ratio: 0.3
        #continue:忽略失敗繼續(xù)執(zhí)行后續(xù)操作(風(fēng)險(xiǎn)較高)
        #pause:暫停更新流程(需人工干預(yù))
        #rollback:自動(dòng)回滾到上一穩(wěn)定版本(推薦生產(chǎn)環(huán)境使用)
        failure_action: rollback
      #回滾策略,update_config中failure_action: rollback 被激活
      rollback_config:
        parallelism: 2
        delay: 5s
        failure_action: rollback
        monitor: 60s
        max_failure_ratio: 0.2
        #stop-first:先停止舊副本再啟動(dòng)新副本(默認(rèn))
        #start-first:先啟動(dòng)新副本再停止舊副本(減少中斷)?
        order: start-first
      #定義服務(wù)調(diào)度到哪些節(jié)點(diǎn)上  
      #placement: 
        #僅將此服務(wù)調(diào)度到具有 worker 角色的節(jié)點(diǎn)上
        #constraints: [node.role == Manager]
  nacos:
    image: nacos/nacos-server:v2.3.2
    ports:
      # web 界面訪問端口
      - 8848:8848
      # 程序使用 grpc 連接的端口
      - 9848:9848
    environment:
      # 單機(jī)模式運(yùn)行
      - MODE=standalone
      # 啟用賬號(hào)密碼驗(yàn)證
      - NACOS_AUTH_ENABLE=true
      # 隨便使用一個(gè)32個(gè)字符組成的字符串,生成 base64 字符串,填寫到這里即可
      - NACOS_AUTH_TOKEN=VGhpc0lzTXlDdXN0b21TZWNyZXRLZXkwMTIzNDU2Nzg=
      # 隨便填寫
      - NACOS_AUTH_IDENTITY_KEY=zykey
      # 隨便填寫
      - NACOS_AUTH_IDENTITY_VALUE=zyvalue
      # 使用 mysql 作為數(shù)據(jù)庫(kù)
      - SPRING_DATASOURCE_PLATFORM=mysql
      - MYSQL_SERVICE_HOST=192.168.56.100
      - MYSQL_SERVICE_PORT=3306
      - MYSQL_SERVICE_DB_NAME=nacos
      - MYSQL_SERVICE_USER=root
      - MYSQL_SERVICE_PASSWORD=123456
      # 設(shè)置連接 mysql 的連接參數(shù)
      - MYSQL_SERVICE_DB_PARAM=characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&allowPublicKeyRetrieval=true&useSSL=false&serverTimezone=UTC
    volumes:
      - ./nacos/logs:/home/nacos/logs

對(duì)于文件中的敏感信息可以使用docker secret管理,docker secret 是 Docker Swarm 模式下用于管理敏感信息(如密碼、密鑰、證書等)的核心機(jī)制。

2. 部署/更新 Stack

[root@manager1 /]# docker stack deploy -c docker-compose.yml my-stack --detach=false

命令解析

my-stack 參數(shù):

my-stack 是用戶自定義的 Stack(堆棧)名稱,用于標(biāo)識(shí)和管理一組通過 docker-compose.yml 定義的關(guān)聯(lián)服務(wù)

1. my-stack的作用 

  • 命名空間:所有通過該命令部署的服務(wù)、網(wǎng)絡(luò)、卷等資源會(huì)統(tǒng)一歸屬于 my-stack 命名空間,格式為 <stack-name>_<service-name>(例如 my-stack_nginx)。
  • 管理隔離:允許在同一 Swarm 集群中部署多個(gè)獨(dú)立的應(yīng)用棧(如 prod-stack 和 test-stack),避免名稱沖突。
  • 操作目標(biāo):后續(xù)可通過 docker stack rm my-stack 或 docker stack services my-stack 等命令精準(zhǔn)操作該堆棧。

2. 是否可以省略?

  • 必須定義:Stack 名稱是強(qiáng)制參數(shù),不能省略。Docker 要求明確指定堆棧名稱以管理資源。

3. 注意事項(xiàng)

  • 名稱沖突:如果重復(fù)使用同一名稱部署,Docker 會(huì)更新現(xiàn)有堆棧而非新建。
  • 生產(chǎn)建議:在 CI/CD 流程中,可通過環(huán)境變量動(dòng)態(tài)注入堆棧名稱(如 ${ENV}-stack)

--detach=false 參數(shù):

1. 參數(shù)作用

  • false(默認(rèn)即將變更)‌:容器日志直接輸出到當(dāng)前終端,阻塞式運(yùn)行(適合調(diào)試)。
  • true‌:容器在后臺(tái)運(yùn)行,返回容器ID(生產(chǎn)環(huán)境常用)。

問題說明

出現(xiàn)一下警告解析:

1. container_name和restart配置為單機(jī)模式,在swarm中已棄用
2. 定義--detach=false參數(shù)

3. 查看 Stack 狀態(tài)

[root@manager1 /]# docker stack ls
[root@manager1 /]# docker stack services my-stack

4. 刪除 Stack

[root@manager1 /]# docker stack rm my-stack

資源清理‌:

清理未被使用的 Docker 資源(包括停止的容器、未被任何容器引用的網(wǎng)絡(luò)、懸空鏡像(dangling images,即無標(biāo)簽的鏡像)、構(gòu)建緩存等)

[root@manager1 /]# docker system prune -f  # 清理停止的容器等殘留項(xiàng)

到此這篇關(guān)于Docker swarm集群部署包含compose.yml文件詳情的文章就介紹到這了,更多相關(guān)Docker swarm集群內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 用Docker安裝Gitlab的方法步驟

    用Docker安裝Gitlab的方法步驟

    這篇文章主要介紹了用Docker安裝Gitlab的方法步驟,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-08-08
  • docker容器中登陸并操作postgresql的實(shí)現(xiàn)

    docker容器中登陸并操作postgresql的實(shí)現(xiàn)

    本文主要介紹了docker容器中登陸并操作postgresql的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-02-02
  • 非root用戶運(yùn)行Docker命令的操作步驟

    非root用戶運(yùn)行Docker命令的操作步驟

    在企業(yè)環(huán)境中,為了保證系統(tǒng)安全和權(quán)限的合理分配,通常不允許直接使用 root 用戶執(zhí)行 Docker 命令,本文將介紹如何配置普通用戶,使其能夠無須 root 權(quán)限便可執(zhí)行 Docker 命令,從而提升安全性和操作便捷性,需要的朋友可以參考下
    2025-04-04
  • 使用docker搭建kong集群操作

    使用docker搭建kong集群操作

    這篇文章主要介紹了使用docker搭建kong集群操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • docker安裝influxdb的詳細(xì)教程(性能測(cè)試)

    docker安裝influxdb的詳細(xì)教程(性能測(cè)試)

    這篇文章主要介紹了docker安裝influxdb的詳細(xì)教程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07
  • 使用Docker部署Nginx并掛載目錄詳解

    使用Docker部署Nginx并掛載目錄詳解

    這篇文章主要為大家詳細(xì)介紹了使用Docker部署Nginx并掛載目錄的相關(guān)方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-04-04
  • Docker鏡像端口映射的原理及實(shí)現(xiàn)

    Docker鏡像端口映射的原理及實(shí)現(xiàn)

    在使用Docker時(shí),端口映射是一個(gè)重要的概念,本篇博客將向您介紹什么是端口映射,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-08-08
  • 5款超好用的開源 Docker工具強(qiáng)烈推薦

    5款超好用的開源 Docker工具強(qiáng)烈推薦

    這篇文章主要介紹了5款超好用的開源 Docker工具強(qiáng)烈推薦,這5個(gè)工具非常實(shí)用,有需要同學(xué)可以學(xué)習(xí)下
    2021-03-03
  • docker鏡像完全卸載的操作步驟

    docker鏡像完全卸載的操作步驟

    這篇文章主要介紹了docker鏡像完全卸載的操作步驟,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • Docker配置Redis集群及主從擴(kuò)容與縮容的操作方法

    Docker配置Redis集群及主從擴(kuò)容與縮容的操作方法

    這篇文章主要介紹了Docker配置Redis集群及主從擴(kuò)容與縮容的操作方法,本文給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2024-06-06

最新評(píng)論