Linux中Docker Swarm实践

一、部署前后分离

  • 使用你自己的自定义镜像

  • 部署多个副本

  • 所有副本使用相同的配置和逻辑

  • Nginx 做反向代理统一入口

  • 外部访问形式如:http://your-domain/api/xxx

1.1 建立私库

镜像已构建并推送到可访问的镜像仓库

启动 Docker Registry 容器

docker run -d -p 5000:5000 --restart=always --name registry registry:2

这会在本地启动一个私有的 Docker Registry,并监听 5000 端口。

配置 HTTPS 或者信任不安全的 Registry,可以通过以下方式让 Docker 客户端信任这个不安全的 Registry:

每个机器都要编辑 /etc/docker/daemon.json 文件(如果没有则创建),添加如下内容:

{"insecure-registries" : ["【ip】:5000"]
}

每个机器都要,然后重启 Docker 服务:

sudo systemctl restart docker

管理机上将 my-java 并推送镜像到 Docker Registry

docker tag my-java [ip]:5000/my-backend:1.0

管理机将镜像上传到 Docker Registry

docker push [ip]:5000/my-backend:1.0

1.2 下载镜像

在其他工作机上下载镜像

docker pull [镜像私库ip]:5000/my-backend:1.0

1.3 创建覆盖 network

这个要在主节点上创建

docker network create --driver overlay --attachable app_network

1.4 部署服务

主节点上部署

docker service create \--name backend-api \--network app_network \--replicas 3 \192.168.107.157:5000/my-backend:1.0

创建 Nginx 配置文件

mkdir /testcd /testvim default.confupstream backend_api {server backend-api:8081;
}server {listen 80;server_name localhost;location / {root   /usr/share/nginx/html;index  index.html index.htm;try_files $uri $uri/ =404;}location ~ ^/api/(.*)$ {rewrite ^/api/(.*)$ /$1 break;proxy_pass http://backend_api;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;proxy_redirect off;}
}

注意:

backend-api 是你上面创建的服务名称

请求 /api/xxx 会被转发到任意一个 backend-api 的副本上

1.5 启动 Nginx 服务

manager添加标签并进行节点更新

docker node update --label-add role=lb manager注释:
标签role
值为lb

根据标签指定部署

docker service create \--name my-nginx \--network app_network \--publish 80:80 \--mount type=bind,source=/test/default.conf,target=/etc/nginx/conf.d/default.conf \--replicas 1 \--constraint 'node.labels.role == lb' \nginx:latest注释:
constraint   指定部署到标签值为lb的机器
replicas     运行一台机器 
mount        运行指定文件

测试访问

curl http://localhost/api/getMsg

来访问你的后端服务。请求会由 Nginx 转发到任意一个 backend-api 副本上,实现负载均衡。

1.6 更新服务

如果你更新了镜像,可以这样滚动更新:

docker service update \--image 【镜像名】:【镜像版本】 \--update-parallelism 2 \--update-delay 10s \服务名注释:--update-parallelism 2      一次更新两个服务
--update-delay 10s          更新一次休息10秒

如果后台压力过大可以多增加几个后台服务

-- 将服务增加10个
docker service update \--replicas 10 \服务名

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Dash 中的 dcc.Clipboard 组件详解:实现一键复制功能

dcc.Clipboard 是 Dash 核心组件库中的一个实用工具,允许用户将指定内容一键复制到系统剪贴板,极大提升用户体验。本文将深入解析该组件的用法、特性和实际应用场景。 一、组件核心功能与价值 dcc.Clipboard 解决了 Web 应用中的关键痛点: 简…

初识C++类的6个默认成员函数

目录 一、初始化和清理 二、拷贝复制 三、取地址重载 四、重要说明 五、注意事项 六、示例代码 在C中,当一个类没有显式定义某些成员函数时,编译器会自动生成6个默认成员函数。这些函数可以分为以下几类: 一、初始化和清理 1、构造函数…

Spring事务失效场景?

题目详细答案Spring事务失效的场景主要有以下几种。非public方法使用Transactional场景描述:Spring事务管理是基于AOP实现的,而AOP对于JDK动态代理或CGLib动态代理只会代理public方法。如果事务方法的访问修饰符为非public,SpringAOP无法正确…

1.电动汽车动力电池系统技术介绍与分类

1.电动汽车动力电池系统技术介绍与分类 1.1 电动汽车发展的三个 “黄金时代” 第一个黄金时代(19 世纪末 - 20 世纪初) 技术基础:铅酸蓄电池发明(1859 年),推动电动三轮车(1873 年)、…

调用阿里云-阿里云百炼 AI

相关文档:大模型服务平台百炼控制台 多轮对话:通义千问模型的多轮对话_大模型服务平台百炼(Model Studio)-阿里云帮助中心 创建知识库:大模型服务平台百炼控制台 创建智能体:大模型服务平台百炼控制台 点击智能体发布后&#x…

Apache Flink:从实时数据分析到实时AI

引言欢迎踏上这段深入了解 Apache Flink 演进历程的旅程,Apache Flink 是一项重新定义了实时数据处理的技术。本博客文章基于王峰(阿里云开放数据平台负责人、Apache Flink Committer)在 2025 年 Flink Forward Asia 新加坡大会上的演讲内容编…

oelove奥壹新版v11.7旗舰版婚恋系统微信原生小程序源码上架容易遇到的几个坑,避免遗漏参数白屏显示等问题

oelove和 金媒我都用过一段时间,其中oelove 用的时间较多,也比较了解这个系统,这个系统比较不错的就是小程序是原生的(完全遵循微信开发者平台规则非Uniapp)开发的,原生小程序的特点就是兼容性好&#xff0…

行为模式-模板方法模式

定义:Define the skeleton of an algorithm in an operation,deferring some steps to subclasses.Template Method lets subclasses redefine certain steps of an algorithm without changing the algorithms structure.(定义一个操作中的算法的框架&a…

Java集合遍历练习题

以下是10道难度递增的集合遍历练习题,涵盖List、Set、Map的各种遍历方式,包含解题思路、代码实现和输出结果: 练习题1:基础遍历 - ArrayList的for-each遍历 题目:创建一个存储5个字符串的ArrayList(元素为&…

深度学习·ZegclipClip-RC

Zegclip 获取图像的特殊编码:使用prompt tuning的技术,目的是减少过拟合和计算量。调整文本编码:使用RD关系描述符,将每一个文本对应的[cls] token和图像对应的[cls] token作哈密顿积,最后文本[cls]token形式化任务 文…

Taro 扩展 API 深度解析与实战指南

Taro 扩展 API 深度解析与实战指南 Taro 作为一款优秀的多端开发框架,提供了一系列强大的扩展 API,这些 API 极大地提升了开发效率和应用的可维护性。本文将深入解析 Taro 的扩展 API,并根据其功能特性进行分类讲解,帮助开发者更…

容器之王--Docker的部署及基本操作演练

1.2 部署docker 1.2.1 容器工作方法1.2.2 部署第一个容器 官方站点:https://docs.docker.com/ 1.2.2.1 配置软件仓库 ]# cd /etc/yum.repos.d ]# vim docker.repo [docker] name docker-ce baseurl https://mirrors.aliyun.com/docker-ce/linux/rhel/9/x86_64/sta…

VFTO与局部放电-高压设备绝缘系统的双重挑战与防护策略

目录 引言VFTO的定义与形成机理VFTO对高压设备绝缘系统的影响局部放电的危害与机制VFTO与局部放电的关联性分析检测与监测技术防护与抑制措施未来技术发展趋势结论与展望引言 在现代电力系统中,超快速暂态过电压(Very Fast Transient Overvoltage, VFTO&…

Windows下Rust编码实现MP4点播服务器

Rust编码可以实现众多简洁、可靠、高效的应用,但语法逻辑要求严格,尤其是依赖库的选择调用,需要耐心坚持“推敲”。借助DeepSeek并反复编程调试和问答改进,可以最终得到完整有效的Rust编码。下面分享Windows下Rust编码实现MP4点播…

ubuntu-相关指令

1、串口1.1确认在系统中检查设备是否正常加载,在终端输入以下命令:way1:ll /dev | grep ttyUSB(ll是LL的小写) way2:ll /dev | grep ttyACM way3:ll /dev | grep ttyCH343USB&#…

docker容器临时文件去除,服务器容量空间

概述: 接到告警提醒,服务器容量不足,去查看了一下,发现确实100g左右容量已基本用完;分析: 1)查看根目录下哪些文件夹占用容量较大 使用命令“ du -ah --max-depth1 / ” 查看目标目录下所有文件…

损耗对信号质量的影响

损耗通常分为介质损耗与导体损耗:介质损耗:介质被施加电场后介质内部带电粒子在外加电场的作用力下进行微小移动介质损耗与频率成正比导体损耗:导体由于存在电阻,在有电流流过时产生的热量造成的损耗为导体损耗。同时,…

【42】【OpenCV C++】 计算图像某一列像素方差 或 某一行像素的方差;

文章目录1 要使用到的函数 和 原理1.1 cv::meanStdDev 函数详解——计算均值和标准差1 .2 方差的通俗解释2 代码实现3 问题3.1 入口参数const cv::Mat& img 和 const cv::Mat img区别项目要求:C OPenCV 中 图像img ,当 string ROIdirection “H”时,…

元图 CAD 插件化革命:突破效率瓶颈,重构智能协作新范式

在建筑、机械、机电等工程领域,传统CAD软件的功能固化与场景割裂已成为效率提升的瓶颈。设计师常面临“通用工具难适配专业需求”、“跨平台协作效率低下”、“数据孤岛阻碍创新”等痛点。元图CAD凭借“场景插件化“核心技术,以模块化能力突破行业桎梏&a…

T:归并排序

归并排序.逆序对简介.归并排序.习题.逆序对简介 \;\;\;\;\;\;\;\;简单介绍一下归并排序的原理&#xff0c;逆序对的基本概念&#xff0c;然后收集相关的练习。 直接用一个基础问题来引入。 因此知道了: \;\;\;\;\;\;\;\;逆序对就是一对数满足 i<j&&nums[i]>nu…