docker怎样实现java的服务不中断滚动升级
1.滚动升级存在难点
1.1 滚动升级时至少有两个节点支撑服务,意味着要开两个同样的端口,普通手段同时映射到宿主机会冲突
2.2 如果不映射到宿主机,得使用负载中间件,不能同时映射,那么必须使用负载中间件
2.3 java启动时候,不是运行了就立马可以服务请求,得等待端口监听好了才行
2.4 滚动升级,新容器起来后,老容器得移除掉
2.5 新的jar文件不能直接替换,需要拷贝个副本,否则旧的容器读到新的文件会报错
2.找到网上开源的方案haproxy+docker-compose实现
docker-compose文件写法如下
services:
lb:
image: haproxy
restart: always
volumes:
- /var/run/docker.sock:/var/run/docker.sock
links:
- web
ports:
- 8080:8080
environment:
- HEALTH_CHECK=check inter 1000 rise 2 fall 2 # 1s内两次连接失败定为失败容器,不接受外部服务
- TIMEOUT=connect 1000
networks:
- mynet
web:
image: amazoncorretto:11-al2023-jdk
restart: always
hostname: 'jeiat'
environment:
- TZ=Asia/Shanghai
- VIRTUAL_HOST=*:8080
ports:
- '127.0.0.0::8080'
volumes:
- ./jar/api-0.0.1-SNAPSHOT.jar:/app-new.jar #映射jar文件到容器,更新时只用拷贝文件
- ./jar/lib:/lib #库地址,减少jar包大小
- ./entry-point.sh:/entry-point.sh
entrypoint: /entry-point.sh
command: ["java","-Dloader.path=./lib","-jar","/app.jar"]
3.入口脚本文件
#!/bin/sh
cp /app-new.jar /app.jar
exec "$@"
4.勿忘给定入口文件可执行权限
📂 分类导航
- ▶ 学与练
- ▶ 课程库
-
▶
软件园
- ▶ AI智能体与应用
- ▶ 开发工具与环境
- ▶ AI 开发和编排
- 业务与生产力应用
- 软件安装脚本
- ▶ 工具箱
- ▶ 共享库
📰 最新文章
- 还在为服务器上的问题烦恼?有了智能终端,我再也不怕了!
- 告别 Token 焦虑,让 AI Agent 24 小时为你打工
- 在 CNB 平台部署 OpenClaw,API Key 免费用,30秒搞定!
- LinkUp:打破数据孤岛,新一代轻量级企业级数据集成平台深度解析
- 记一次投影连接网络存储
- 第6章 数据库集成
- 第5章 表单处理与验证
- 第4章 模板与静态文件
- 第3章 路由与视图
- 第2章 环境搭建与开发工具
- Redis完整教程
- 芋道包容网关条件研究
- docker怎样实现java不中断滚动升级
- go如何编译一个最小的exe
- 一键搭建专属知识库
- 自部署的私人云盘
- 变量声明
- PyWxDump:从零开始掌控你的微信数据——密钥获取、解密与可视化全攻略
- 搭建一个docker镜像缓存
- mtqq 服务搭建教程