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

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

确认端口映射是否正确。

相关推荐
mingyuewu2 小时前
MAC安装docker 后提示com.docker.vmnetd”将对您的电脑造成伤害
macos·docker·容器
小小寂寞的城2 小时前
Ubuntu里安装Jenkins
ubuntu·ci/cd·docker·jenkins
赴前尘2 小时前
Go+Gin实现安全多文件上传:带MD5校验的完整解决方案
安全·golang·gin
Architect_Lee5 小时前
阿里云服务器安装docker以及mysql数据库
阿里云·docker·云计算
geek_super5 小时前
Docker学习--容器的root文件系统(rootfs)命令--docker cp 命令
docker
专注代码七年5 小时前
Docker运维篇
运维·docker·容器
一杯敬朝阳 一杯敬月光6 小时前
WIN11 企业版 部署Dify+Docker
运维·docker·容器
Leo Han6 小时前
k8s常用命令(持续更新中)
docker·容器·kubernetes
KubeSphere 云原生6 小时前
云原生周刊:Kubernetes v1.33 要来了
云原生·容器·kubernetes