docker

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > 云和虚拟化 > docker > Docker swarm集群

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

作者:佛说"獨"

Docker Swarm是Docker的集群管理工具,支持服务部署、副本调度、Stack管理(基于Compose文件),包含初始化集群、节点添加、服务更新、资源清理等操作,确保容器化应用的高效运行,本文给大家介绍Docker swarm集群部署包含compose.yml文件详情,感兴趣的朋友一起看看吧

概述

Docker Swarm 是 Docker 的原生集群管理和编排工具,允许您将多个 Docker 主机组合成一个虚拟的 Docker 主机来管理和部署容器。

角色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(工作节点)令牌
[root@manager1 /]# docker swarm join-token worker
#获取manager(管理节点)令牌
[root@manager1 /]# docker swarm join-token manager

1.2 生成新令牌

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

2. 添加工作节点

添加管理节点可以先通过 docker swarm join-token manager 命令获取token,再进行添加

复制初始化时获取到的命令重新获取添加工作节点的命令:

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

在worker1和worker2服务器执行以下命令:

[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. 查看节点集群列表

[root@manager1 ~]# docker node ls

4. 查看的节点详情

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

5. 退出集群

5.1 工作节点退出集群

在目标服务器(worker1、worker2)中执行下列命令:

[root@worker1 ~]# docker swarm leave

5.2 管理节点退出集群(需谨慎)

管理节点退出可能影响集群选举(Raft协议),需额外处理:

  1. 降级为工作节点再退出(推荐)‌:
#先降级为工作节点‌
[root@manager1 /]# docker node demote <节点ID>
#再执行退出‌
[root@manager1 /]# docker swarm leave
  1. 强制退出(风险较高)‌:
    若无法降级(如单管理节点集群),使用强制命令
#再执行退出‌
[root@manager1 /]# docker swarm leave --force

5.3 在管理节点中对刚才退出节点进行删除 ‌:

[root@manager1 /]# docker node rm 节点名称|节点ID

docker service部署

核心作用‌:管理 ‌单个服务‌(如 Nginx、MySQL),负责副本调度、滚动更新、健康检查等操作

1. 部署服务

#命令会创建一个名为 my-nginx 的服务,并在集群中运行二个副本,映射到主机的80端口
[root@manager1 /]# docker service create --name my-nginx --replicas 2 -p 80:80 nginx

2. 更新服务配置 

[root@manager1 /]# docker service update --image nginx:alpine my-nginx
#强制更新my-nginx服务,--force 参数:强制更新服务
[root@manager1 /]# docker service update --force my-nginx

3. 查看集群中的服务

3.1 列出集群中运行的所有服务

功能:查看当前 Swarm 集群中所有正在运行的服务的概览信息(如服务名称、副本数、镜像等)。

[root@manager1 /]# docker service ls

关键字段说明

3.2 查看服务的任务(容器)运行状态

功能:查看某个服务的具体任务(Task,Swarm 中服务的实例)在集群节点上的分布和运行状态。

用法docker service ps <服务名或ID>

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

关键字段说明

3.3 查看服务的详细配置信息

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

4. 扩展服务的副本数量:

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

5. 删除服务:

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

docker stack部署

概述:Docker Stack 用于在 Swarm 集群上管理多容器应用。它基于 Compose 文件定义应用,并支持复杂的多服务部署。

1. 编写 docker-compose.yml 文件:

#version: '3'
services:
  mysql:
    image: mysql:8.0.36
    environment:
      TZ: "Asia/Shanghai"
      MYSQL_ROOT_PASSWORD: 123456
    volumes:
      # 映射数据库文件目录
      - ./mysql/db:/var/lib/mysql 
      # 映射日志文件目录
      - ./mysql/data/log:/data/log
      # 映射其他数据目录
      - ./mysql/data/data:/data/data
      # 映射配置文件目录
      - ./mysql/data/conf.d:/etc/mysql/conf.d
      # 映射文档目录
      - ./mysql/data/documents:/data/documents
      # 同步主机和容器的时间,只读
      - /etc/localtime:/etc/localtime:ro
    ports:
      - 3306:3306
    deploy:
      #设置服务的运行模式为 replicated,表示该服务将在多个节点上复制运行
      mode: replicated
      #表示该服务将启动 2 个副本(即两个容器实例)
      replicas: 2
      #给服务添加标签 APP=WEB,可以用于后续的服务筛选或管理
      labels: [MY=DB]
      resources: #定义服务使用的资源限制和预留
        limits:
          #每个容器最多使用 0.25 个 CPU(即 25% 的 CPU 资源)
          cpus: '0.25'
          #每个容器最多使用 512MB 内存
          memory: 512M
        reservations:
          #每个容器至少保证有 0.25 个 CPU 可用
          cpus: '0.25'
          #每个容器至少保证有 256MB 内存可用
          memory: 256M
      #重启策略,管理容器‘非计划退出'时的恢复(如进程崩溃、资源不足)
      restart_policy:
        #只有当容器失败时才重启
        condition: on-failure
        #每次重启之间等待 5 秒
        delay: 5s
        #最多尝试重启 3 次
        max_attempts: 3
        #重启次数统计的时间窗口为 120 秒
        window: 120s
      #更新策略,控制服务'主动更新‘时的滚动部署(如镜像升级)
      update_config:
        #每次更新一个副本
        parallelism: 1
        #每次更新之间等待 10 秒
        delay: 10s
        #监控更新状态的时间为 60 秒
        monitor: 60s
        #允许的最大失败比率为 30%
        max_failure_ratio: 0.3
        #continue:忽略失败继续执行后续操作(风险较高)
        #pause:暂停更新流程(需人工干预)
        #rollback:自动回滚到上一稳定版本(推荐生产环境使用)
        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:先停止旧副本再启动新副本(默认)
        #start-first:先启动新副本再停止旧副本(减少中断)‌
        order: start-first
      #定义服务调度到哪些节点上  
      #placement: 
        #仅将此服务调度到具有 worker 角色的节点上
        #constraints: [node.role == Manager]
  nacos:
    image: nacos/nacos-server:v2.3.2
    ports:
      # web 界面访问端口
      - 8848:8848
      # 程序使用 grpc 连接的端口
      - 9848:9848
    environment:
      # 单机模式运行
      - MODE=standalone
      # 启用账号密码验证
      - NACOS_AUTH_ENABLE=true
      # 随便使用一个32个字符组成的字符串,生成 base64 字符串,填写到这里即可
      - NACOS_AUTH_TOKEN=VGhpc0lzTXlDdXN0b21TZWNyZXRLZXkwMTIzNDU2Nzg=
      # 随便填写
      - NACOS_AUTH_IDENTITY_KEY=zykey
      # 随便填写
      - NACOS_AUTH_IDENTITY_VALUE=zyvalue
      # 使用 mysql 作为数据库
      - 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
      # 设置连接 mysql 的连接参数
      - 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

对于文件中的敏感信息可以使用docker secret管理,docker secret 是 Docker Swarm 模式下用于管理敏感信息(如密码、密钥、证书等)的核心机制。

2. 部署/更新 Stack

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

命令解析

my-stack 参数:

my-stack 是用户自定义的 Stack(堆栈)名称,用于标识和管理一组通过 docker-compose.yml 定义的关联服务

1. my-stack的作用 

2. 是否可以省略?

3. 注意事项

--detach=false 参数:

1. 参数作用

问题说明

出现一下警告解析:

1. container_name和restart配置为单机模式,在swarm中已弃用
2. 定义--detach=false参数

3. 查看 Stack 状态

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

4. 删除 Stack

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

资源清理‌:

清理未被使用的 Docker 资源(包括停止的容器、未被任何容器引用的网络、悬空镜像(dangling images,即无标签的镜像)、构建缓存等)

[root@manager1 /]# docker system prune -f  # 清理停止的容器等残留项

到此这篇关于Docker swarm集群部署包含compose.yml文件详情的文章就介绍到这了,更多相关Docker swarm集群内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文