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 查看服务和任务的状态。

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

确认端口映射是否正确。

相关推荐
闲猫2 小时前
go orm GORM
开发语言·后端·golang
丁卯4042 小时前
Go语言中使用viper绑定结构体和yaml文件信息时,标签的使用
服务器·后端·golang
Bright16684 小时前
centos9安装k8s集群
云原生·容器·kubernetes
!!!5255 小时前
华为云镜像加速器
docker·容器·华为云
xidianjiapei0016 小时前
Kubernetes的Ingress 资源是什么?
云原生·容器·kubernetes
sszdzq7 小时前
Docker
运维·docker·容器
dmy8 小时前
docker 快速构建开发环境
后端·docker·容器
土豆沒加9 小时前
K8S的Dashboard登录及验证
云原生·容器·kubernetes
终端行者11 小时前
kubernetes1.28部署mysql5.7主从同步,使用Nfs制作持久卷存储,适用于centos7/9操作系统,
数据库·容器·kubernetes
2401_8979300611 小时前
linux系统如何配置host.docker.internal
linux·docker·eureka