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

采用docker 部署后端golang服务

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

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

docker swarm init

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

docker info

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

Swarm: activeNodeID: gql7fxkr4f3ddlcig7csko0txIs Manager: trueClusterID: <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-20241205144225ports:- "8990:8990"networks:- app-networkdeploy: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 查看服务和任务的状态。
检查日志和任务的具体状态,确认是否有错误。
确认端口映射是否正确。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/35362.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

HarmonyOS 5.0应用开发——Ability与Page数据传递

【高心星出品】 文章目录 Ability与Page数据传递Page向Ability传递数据Ability向Page传递数据 Ability与Page数据传递 基于当前的应用模型&#xff0c;可以通过以下几种方式来实现UIAbility组件与UI之间的数据同步。 使用EventHub进行数据通信&#xff1a;在基类Context中提供…

【unity框架开发10】从零手搓一个UI管理器/UI框架,自带一个提示界面,还有自带DOTween动画效果(2024/10/10修改补充)

最终效果 文章目录 最终效果前言UI组件和布局的基础使用UI管理器1、新增UI面板层枚举2、初始化2.1、用代码创建画布2.2、用代码创建UI面板的父物体层2.3、代码添加EventSystem物体 3、ShowPanel显示面板方法4、HidePanel隐藏面板的方法5、CloseUI关闭界面的方法6、UI界面基类 测…

智能指针【C++11】

文章目录 智能指针std::auto_ptr std::unique_ptrstd::shared_ptrstd::shared_ptr的线程安全问题std::weak_ptr 智能指针 std::auto_ptr 管理权转移 auto_ptr是C98中引入的智能指针&#xff0c;auto_ptr通过管理权转移的方式解决智能指针的拷贝问题&#xff0c;保证一个资源…

Win11 24h2 不能正常ensp

Win11 24h2 不能正常ensp 因为Win11 24h2的内核大小更改&#xff0c;目前virtualbox在7.1.4中更新解决了。而ensp不支持5.2.44之后的virtualbox并已停止维护&#xff0c;不再进行5.2.44修复&#xff0c;virtualbox 5.2.24的ntdll文件sizeofimage问题&#xff0c;此问题导致ens…

使用GO--Swagger生成文档

概述 在前后端分离的项目中&#xff0c;后端配置swagger可以很好的帮助前端人员了解后端接口参数和数据传输。go-swagger 是一个功能全面且高性能的Go语言实现工具包&#xff0c;用于处理Swagger 2.0&#xff08;即OpenAPI 2.0&#xff09;规范。它提供了丰富的工具集&#x…

沃德云商协系统微信小程序PHP+Uniapp

“多组织”的云服务平台&#xff0c;打造总商会、总协会、总校友会、工商联等多组织无障碍沟通合作平台&#xff0c;让各大分会、各大分校友会、分组织实现轻松管理&#xff0c;线上宣传展示、商机挖掘、会员管理、会员服务、跨界交流等, 借助沃德云商协平台系统&#xff0c;让…

网站打开速度测试工具:互联网优化的得力助手

在信息飞速流转的互联网时代&#xff0c;网站如同企业与用户对话的窗口&#xff0c;其打开速度直接关乎用户体验&#xff0c;乃至业务的成败。所幸&#xff0c;一系列专业的网站打开速度测试工具应运而生&#xff0c;它们宛如幕后的技术侦探&#xff0c;精准剖析网站性能&#…

shell脚本实战案例

文章目录 实战第一坑功能说明脚本实现 实战第一坑 实战第一坑&#xff1a;在Windows系统写了一个脚本&#xff0c;比如上面&#xff0c;随后上传到服务&#xff0c;执行会报错 原因&#xff1a; 解决方案&#xff1a;在linux系统touch文件&#xff0c;并通过vim添加内容&…

Face2QR:可根据人脸图像生成二维码,还可以扫描,以后个人名片就这样用了!

今天给大家介绍的是一种专为生成个性化二维码而设计的新方法Face2QR&#xff0c;可以将美观、人脸识别和可扫描性完美地融合在一起。 下图展示为Face2QR 生成的面部图像&#xff08;第一行&#xff09;和二维码图像&#xff08;第二行&#xff09;。生成的二维码不仅忠实地保留…

数据结构---队列(Queue)

1. 简介 队列&#xff08;Queue&#xff09;是一种常用的数据结构&#xff0c;它遵循先进先出&#xff08;FIFO&#xff0c;First In First Out&#xff09;的原则。这意味着第一个进入队列的元素将是第一个被移除的元素。队列在计算机科学中有着广泛的应用&#xff0c;比如任…

玩游戏没有flash插件的解决方案(No Flash)

一、概述 在网页游戏开发领域&#xff0c;Flash和H5是两种主流的技术。Flash游戏曾经占据主导地位&#xff0c;但随着HTML5技术的发展和浏览器对Flash支持的逐渐减少&#xff0c;H5游戏逐渐成为主流。本教程将详细介绍Flash和H5的区别&#xff0c;并提供将Flash游戏转换为H5游戏…

如何查看电脑的屏幕刷新率?

1、按一下键盘的 win i 键&#xff0c;打开如下界面&#xff0c;选择【系统】&#xff1a; 2、选择【屏幕】-【高级显示设置】 如下位置&#xff0c;显示屏幕的刷新率&#xff1a;60Hz 如果可以更改&#xff0c;则选择更高的刷新率&#xff0c;有助于电脑使用起来界面更加流…

新书速览|循序渐进Node.js企业级开发实践

《循序渐进Node.js企业级开发实践》 1 本书内容 《循序渐进Node.js企业级开发实践》结合作者多年一线开发实践&#xff0c;系统地介绍了Node.js技术栈及其在企业级开发中的应用。全书共分5部分&#xff0c;第1部分基础知识&#xff08;第1&#xff5e;3章&#xff09;&#xf…

AUTOSAR AP和CP的安全要求规范(Safety Req)详细解读

一、规范的编制的背景原因 编制该规范的原因 确保系统安全性和可靠性 随着汽车电子系统日益复杂&#xff0c;功能不断增加&#xff0c;对安全性和可靠性的要求也越来越高。该规范为AUTOSAR平台在安全执行、配置、更新、信息交换、数据处理等多方面制定了明确要求&#xff0c;…

数仓技术hive与oracle对比(四)

问题处理 sqoop导入异常 将oracle数据库中的表&#xff0c;用sqoop导入hive时&#xff0c;如果表中字段值含有“&#xff0c;”&#xff0c;会导致导入hive后&#xff0c;每一行所有字段的内容都放在了第一个字段&#xff0c;其他字段均没有值。这是因为hive底层是以文件的形…

流网络等价性证明:边分解后的最大流保持不变

流网络等价性证明:边分解后的最大流保持不变 问题描述证明思路伪代码C 代码实现解释问题描述 在流网络中,证明将一条边分解为两条边所得到的是一个等价的网络。具体来说,假设流网络 $ G $ 包含边 $ (u, v) $,我们以如下方式创建一个新的流网络 $ G’ $: 创建一个新结点 $…

应用案例 | 船舶海洋: 水下无人航行器数字样机功能模型构建

水下无人航行器数字样机功能模型构建 一、项目背景 为响应水下装备系统研制数字化转型及装备系统数字样机建设的需要&#xff0c;以某型号水下无人航行器&#xff08;Underwater Unmanned Vehicle&#xff0c;UUV&#xff09;为例&#xff0c;构建UUV数字样机1.0功能模型。针对…

RabbitMQ七种工作模式之简单模式, 工作队列模式, 发布订阅模式, 路由模式, 通配符模式

文章目录 一. Simple(简单模式)公共代码:生产者:消费者: 二. Work Queue(工作队列模式)公共代码:生产者:消费者1, 消费者2(代码相同): 三. Publish/Subscribe(发布/订阅模式)公共代码:生产者:消费者: 四. Routing(路由模式)公共代码:消费者: 五. Topics(通配符模式)公共代码:生…

前端知识1html

VScode一些快捷键 Ctrl/——注释 !——生成html框架元素 *n——生成n个标签 直接书写html的名字回车生成对应的标签 常见标签 span&#xff1a; <span style"color: red;">hello</span> <span>demo</span> span实现&#xff1a; 标题…

Push an existing folder和Push an existing Git repository的区别

Push an existing folder 和 Push an existing Git repository 是在使用 Git 服务&#xff08;如 GitHub、GitLab、Bitbucket 等&#xff09;时两个常见的操作选项。它们的区别主要体现在项目的初始化和版本控制状态上&#xff1a; 1. Push an existing folder 适用场景&#…