当前位置: 首页 > java >正文

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.xdnf.cn/news/17280.html

相关文章:

  • 手机控制断路器:智能家居安全用电的新篇章
  • SupChains技术团队:需求预测中减少使用分层次预测(五)
  • VSCode - 设置Python venv
  • PyTorch + PaddlePaddle 语音识别
  • 深入探索C++模板实现的单例模式:通用与线程安全的完美结合
  • 初识C++类的6个默认成员函数
  • 基于 Socket.IO 实现 WebRTC 音视频通话与实时聊天系统(Spring Boot 后端实现)
  • LongVie突破超长视频生成极限:1分钟电影级丝滑视频,双模态控制告别卡顿退化
  • PyTorch如何实现婴儿哭声检测和识别
  • 串联所有单词的子串-leetcode
  • 解读 gpt-oss-120b 和 gpt-oss-20b开源模型
  • 多账号管理方案:解析一款免Root的App分身工具
  • 抖音、快手、视频号等多平台视频解析下载 + 磁力嗅探下载、视频加工(提取音频 / 压缩等)
  • 编程之线性代数矩阵和概率论统计知识回顾
  • 基于langchain的两个实际应用:[MCP多服务器聊天系统]和[解析PDF文档的RAG问答]
  • 表单元素与美化技巧:打造用户友好的交互体验
  • 基于Ruby的IP池系统构建分布式爬虫架构
  • Qt帮助文档跳转问题修复指南
  • Flink-1.19.0源码详解9-ExecutionGraph生成-后篇
  • 通信中间件 Fast DDS(一) :编译、安装和测试
  • 汽车线束设计—导线的选取
  • WEB开发-第二十七天(PHP篇)
  • 中国MCP市场:腾讯、阿里、百度的本土化实践
  • Disruptor 消费者核心:BatchEventProcessor解析
  • 脱机部署k3s
  • 嵌入式硬件中MOSFET基本控制详解
  • 前端开发(HTML,CSS,VUE,JS)从入门到精通!第七天(Vue)(二)
  • FluentUI的介绍与使用案列
  • Pytest项目_day06(requests中Session的用法)
  • Spring文件泄露与修复方案总结