docker 集群 Docker Swarm 滚动平滑部署golang后端服务

采用docker 部署后端golang服务

1、首先需要安装docker 这里不再细说,操作安装文档linux docker 安装文档

2、其次需要初始化Docker Swarm 模式。你可以在 Docker 主机上运行以下命令:

docker swarm init

初始化完成后,检查下Swarm 状态,你可以运行以下命令来确认 Swarm 状态是否正常:

docker info

在输出中,你应该看到类似于以下内容,表示 Swarm 已启用:

Swarm: active
  NodeID: gql7fxkr4f3ddlcig7csko0tx
  Is Manager: true
  ClusterID: <ClusterID>
  ...

加入工作节点:

如果你有其他机器或节点需要加入 Swarm 集群作为工作节点,可以使用 docker swarm join 命令,命令已经在输出中给出:

docker swarm join --token SWMTKN-1-4ekwch9dak28qzuyneaewu8403qia6ednsqqn731lv79v2txbj-dmwj7wrttsr442pgglzmtl1ix 10.0.4.20:2377

3、检查docker Swarm 下的网络模式 ,在 Docker Swarm 模式下,只有使用 overlay 驱动的网络才可以用于服务部署,而 bridge 驱动的网络只能用于单主机的容器,不能在多主机的 Swarm 集群中使用。

检查网络命令

  docker network ls

你可以通过执行 docker network ls 来列出当前所有的 Docker 网络。命令的输出类似如下:

NETWORK ID          NAME                DRIVER              SCOPE
e8b8c6a342a9        bridge              bridge              local
72b13ab0e3ab        host                host                local
a5a3a23fbb64        none                null                local
12345abcd678        app-network         overlay             swarm

我的服务器网络显示为:

[root@VM-4-20-centos app]# docker network ls
NETWORK ID     NAME                   DRIVER    SCOPE
vuip9ry3q1td   app-network            overlay   swarm
ab2c39619485   app_app-network        bridge    local
7f2ce53d815a   bridge                 bridge    local
02ba8de20aa8   docker_gwbridge        bridge    local
1f9a717a6aef   host                   host      local
uj3pfaztxt0u   ingress                overlay   swarm
5ebd5dde863b   my_stack_app-network   bridge    local
f102f9997f70   none                   null      local
[root@VM-4-20-centos app]# 

输出字段解释:

NETWORK ID:网络的唯一标识符。

NAME:网络的名称,例如 bridge、host、none,或你自定义的网络如 app-network。

DRIVER:网络的驱动类型,常见的有 bridge、host、overlay 等。

SCOPE:网络的作用范围,local 表示仅限于当前主机,swarm 表示该网络可跨多个 Swarm 节点使用。

如果你看到 app-network 已经存在,且它的驱动类型是 overlay,说明该网络已经创建并且可以在 Swarm 集群中使用。

如果 docker network ls 中没有看到 overlay 类型的 app-network,则需要手动创建这个网络,命令如下:

docker network create --driver overlay app-network

4、编写docker-compose.yml 部署文件

version: '3.8'

services:
  app:
    image: registry.cn-shenzhen.aliyuncs.com/goper/app:7a2dd68-20241205144225
    ports:
      - "8990:8990"
    networks:
      - app-network
    deploy:
      replicas: 3  # 配置 3 个副本
      update_config:
        parallelism: 1  # 每次更新一个副本,确保逐个重启副本
        delay: 10s  # 每个副本更新间的延迟
        failure_action: rollback  # 如果更新失败,回滚到上一个工作版本
      restart_policy:
        condition: on-failure  # 容器失败时才重启

networks:
  app-network:
    external: true  # 使用外部创建的 overlay 网络

5、重新部署服务: 执行以下命令重新部署你的服务:

docker stack deploy -c docker-compose.yml my_stack

部署完成后,可以查看docker swarm 服务状态

  1. 查看 Swarm 服务的状态
    在 Swarm 模式下,容器不直接列出在 docker ps 中。你需要查看 Swarm 服务的状态和任务,而不是直接查看容器。你可以使用以下命令来检查 my_stack 中的服务和任务:

    docker stack services my_stack

这将显示 my_stack 中所有服务的状态,包括每个服务的副本数、更新状态等。

如果 my_stack 中有服务正在运行,应该会看到类似如下的输出:

ID                  NAME                MODE                REPLICAS            IMAGE
-------------------  ------------------  ------------------  ------------------  ---------------------------
abcd12345678        my_stack_app        replicated          3/3                 registry.cn-shenzhen.aliyuncs.com/goper/app:最新镜像

我的服务器本地显示:

[root@VM-4-20-centos app]# docker stack services my_stack
ID             NAME           MODE         REPLICAS   IMAGE                                                                PORTS
5mlselws7kbj   my_stack_app   replicated   3/3        registry.cn-shenzhen.aliyuncs.com/goper/app:7a2dd68-20241205144225   *:8990->8990/tcp
[root@VM-4-20-centos app]# 
  1. 查看 Swarm 任务的状态
    如果服务在 Swarm 中已经创建,但任务没有正常运行,你可以使用以下命令查看具体的任务状态:

    docker service ps my_stack_app

我的服务器本地显示:

[root@VM-4-20-centos app]# docker service ps my_stack_app
ID             NAME                 IMAGE                                                                NODE             DESIRED STATE   CURRENT STATE             ERROR     PORTS
fjw3l27ehyqs   my_stack_app.1       registry.cn-shenzhen.aliyuncs.com/goper/app:7a2dd68-20241205144225   VM-4-20-centos   Running         Running 19 minutes ago              
lk1pum1faprb    \_ my_stack_app.1   registry.cn-shenzhen.aliyuncs.com/goper/app:32461e1-20241205195126   VM-4-20-centos   Shutdown        Shutdown 19 minutes ago             
k1n0ahl5gasw   my_stack_app.2       registry.cn-shenzhen.aliyuncs.com/goper/app:7a2dd68-20241205144225   VM-4-20-centos   Running         Running 19 minutes ago              
7vtzyt5reivk    \_ my_stack_app.2   registry.cn-shenzhen.aliyuncs.com/goper/app:32461e1-20241205195126   VM-4-20-centos   Shutdown        Shutdown 19 minutes ago             
gl7p3e9gb029   my_stack_app.3       registry.cn-shenzhen.aliyuncs.com/goper/app:7a2dd68-20241205144225   VM-4-20-centos   Running         Running 20 minutes ago              
jg4g7j33d1pk    \_ my_stack_app.3   registry.cn-shenzhen.aliyuncs.com/goper/app:32461e1-20241205195126   VM-4-20-centos   Shutdown        Shutdown 20 minutes ago             
[root@VM-4-20-centos app]# 

这将显示服务 my_stack_app 的所有任务,包括每个任务的状态(例如是否正在启动或出现错误)。

  1. 检查服务日志
    你也可以检查 Swarm 服务的日志,查看是否有错误信息:

    docker service logs my_stack_app

我的服务器本地显示:

[root@VM-4-20-centos app]# docker service logs my_stack_app
my_stack_app.1.lk1pum1faprb@VM-4-20-centos    | ########################################## start exec /etc/kickStart.d/healthcheck.sh
my_stack_app.1.lk1pum1faprb@VM-4-20-centos    | ########################################## done exec /etc/kickStart.d/healthcheck.sh
my_stack_app.1.lk1pum1faprb@VM-4-20-centos    | ########################################## start exec /etc/kickStart.d/run.sh
my_stack_app.1.lk1pum1faprb@VM-4-20-centos    | starting...
my_stack_app.1.lk1pum1faprb@VM-4-20-centos    | start success
my_stack_app.1.lk1pum1faprb@VM-4-20-centos    | ########################################## done exec /etc/kickStart.d/run.sh
my_stack_app.2.7vtzyt5reivk@VM-4-20-centos    | ########################################## start exec /etc/kickStart.d/healthcheck.sh
my_stack_app.2.7vtzyt5reivk@VM-4-20-centos    | ########################################## done exec /etc/kickStart.d/healthcheck.sh
my_stack_app.2.7vtzyt5reivk@VM-4-20-centos    | ########################################## start exec /etc/kickStart.d/run.sh
my_stack_app.2.7vtzyt5reivk@VM-4-20-centos    | starting...
my_stack_app.2.7vtzyt5reivk@VM-4-20-centos    | start success
my_stack_app.2.7vtzyt5reivk@VM-4-20-centos    | ########################################## done exec /etc/kickStart.d/run.sh
my_stack_app.3.jg4g7j33d1pk@VM-4-20-centos    | ########################################## start exec /etc/kickStart.d/healthcheck.sh
my_stack_app.3.jg4g7j33d1pk@VM-4-20-centos    | ########################################## done exec /etc/kickStart.d/healthcheck.sh
my_stack_app.3.jg4g7j33d1pk@VM-4-20-centos    | ########################################## start exec /etc/kickStart.d/run.sh
my_stack_app.3.jg4g7j33d1pk@VM-4-20-centos    | starting...
my_stack_app.3.jg4g7j33d1pk@VM-4-20-centos    | start success
my_stack_app.3.jg4g7j33d1pk@VM-4-20-centos    | ########################################## done exec /etc/kickStart.d/run.sh
my_stack_app.3.gl7p3e9gb029@VM-4-20-centos    | ########################################## start exec /etc/kickStart.d/healthcheck.sh
my_stack_app.3.gl7p3e9gb029@VM-4-20-centos    | ########################################## done exec /etc/kickStart.d/healthcheck.sh
my_stack_app.3.gl7p3e9gb029@VM-4-20-centos    | ########################################## start exec /etc/kickStart.d/run.sh
my_stack_app.3.gl7p3e9gb029@VM-4-20-centos    | starting...
my_stack_app.3.gl7p3e9gb029@VM-4-20-centos    | start success
my_stack_app.3.gl7p3e9gb029@VM-4-20-centos    | ########################################## done exec /etc/kickStart.d/run.sh
my_stack_app.1.fjw3l27ehyqs@VM-4-20-centos    | ########################################## start exec /etc/kickStart.d/healthcheck.sh
my_stack_app.1.fjw3l27ehyqs@VM-4-20-centos    | ########################################## done exec /etc/kickStart.d/healthcheck.sh
my_stack_app.1.fjw3l27ehyqs@VM-4-20-centos    | ########################################## start exec /etc/kickStart.d/run.sh
my_stack_app.1.fjw3l27ehyqs@VM-4-20-centos    | starting...
my_stack_app.1.fjw3l27ehyqs@VM-4-20-centos    | start success
my_stack_app.1.fjw3l27ehyqs@VM-4-20-centos    | ########################################## done exec /etc/kickStart.d/run.sh
my_stack_app.2.k1n0ahl5gasw@VM-4-20-centos    | ########################################## start exec /etc/kickStart.d/healthcheck.sh
my_stack_app.2.k1n0ahl5gasw@VM-4-20-centos    | ########################################## done exec /etc/kickStart.d/healthcheck.sh
my_stack_app.2.k1n0ahl5gasw@VM-4-20-centos    | ########################################## start exec /etc/kickStart.d/run.sh
my_stack_app.2.k1n0ahl5gasw@VM-4-20-centos    | starting...
my_stack_app.2.k1n0ahl5gasw@VM-4-20-centos    | start success
my_stack_app.2.k1n0ahl5gasw@VM-4-20-centos    | ########################################## done exec /etc/kickStart.d/run.sh
[root@VM-4-20-centos app]# 

这将显示 my_stack_app 服务的日志,可能会提供更多关于服务启动失败或出现问题的线索。

  1. 确认端口映射
    请注意,在 docker ps 输出中显示的是 8090 和 8991 端口映射,而你的服务 my_stack_app 配置的是端口 8990。你可以在 docker service ps 或 docker stack services 输出中确认服务是否正确绑定到 8990 端口。

总结:

使用 docker stack services my_stack 和 docker service ps my_stack_app 查看服务和任务的状态。

检查日志和任务的具体状态,确认是否有错误。

确认端口映射是否正确。

相关推荐
LuckyLay2 小时前
Golang学习笔记_11——指针
笔记·学习·golang·指针
一名陈序员2 小时前
Go-FastDFS文件服务器一镜到底使用Docker安装
linux·服务器·docker
liuyunshengsir3 小时前
crictl和ctr与docker的命令的对比
java·docker·eureka
好看资源平台3 小时前
Docker镜像与容器管理
docker
檀越剑指大厂3 小时前
【Docker系列】SpringBoot项目启动健康检查
spring boot·docker·容器
基哥的奋斗历程3 小时前
Linux 安装 与 Docker 安装 配置镜像
linux·运维·docker
LuckyLay5 小时前
Golang学习笔记_10——Switch
笔记·学习·golang·switch
明月看潮生6 小时前
青少年编程与数学 02-004 Go语言Web编程 04课题、接收和处理请求
开发语言·青少年编程·golang·编程与数学
程思扬6 小时前
怎么使用Docker轻松搭建自己的本地化音乐库?
运维·服务器·人工智能·经验分享·docker·云原生·容器
壮Sir不壮11 小时前
go 协程练习例题
开发语言·后端·golang