分类

链接

2025 年 2 月
 12
3456789
10111213141516
17181920212223
2425262728  

近期文章

热门标签

新人福利,免费薅羊毛

现在位置:    首页 > DevOps, Docker, k8s, LINUX, 微服务, 系统架构 > 正文
共享办公室出租
单台服务器应用不中断服务热部署滚动更新方案
DevOps, Docker, k8s, LINUX, 微服务, 系统架构 暂无评论 阅读(43)

多台服务器通过负载均衡,或者K8S之类的,很容易实现不断服务滚动更新

 

以下是 单台服务器应用不中断服务热部署方案,本文基于docker /   docker swarm实现(目录如下)

 

1.准备好dockerfile和APP

# 基础镜像
FROM openjdk:21-jdk
# author
MAINTAINER bruce

# 挂载上传目录
VOLUME ./upload/

# 创建目录
RUN mkdir -p /home/app
ENV TZ=Asia/Shanghai
RUN ln -sf /usr/share/zoneinfo/$TZ /etc/localtime    && echo $TZ > /etc/timezone

# 指定路径
WORKDIR /home/app

# 复制jar文件到路径
COPY ./api-0.0.1-SNAPSHOT.jar /home/app/api-0.0.1-SNAPSHOT.jar
 

# 启动服务
EXPOSE 8000

ENTRYPOINT ["java","-jar","api-0.0.1-SNAPSHOT.jar"]

2. 准备好 docker-compose.yml

version: '3.7'
services:
  homecare-api:
    image: homecare-api:202502281410
    ports:
      - "8000:8000"
    hostname: homecare-api
    deploy:
      replicas: 1
      update_config:
        parallelism: 1
        delay: 10s
        order: start-first # 先启动新副本,再停止旧副本
      restart_policy:
        condition: on-failure
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8000/api/health"]
      interval: 30s #必须等服务有足够的时间启动,否则还未启动,就被当成不健康被不断重启
      timeout: 3s
      retries: 3

3. 打包镜像

docker build -t homecare-api:202502281410 .

4.使用以下命令将服务部署到 Swarm 中:

docker stack deploy -c docker-compose.yml homecare-api

5. 构建新版本镜像

当需要更新服务时,首先构建新的镜像版本:
docker build -t homecare-api:202502281430 .

 

6. 更新服务

更新 docker-compose.yml 文件中的镜像版本:
image: homecare-api:202502281427

 

然后运行以下命令进行更新:
docker stack deploy -c docker-compose.yml homecare-api

 

Docker Swarm 会自动执行滚动更新
  1. 先启动一个新版本的容器。
  2. 确保新版本容器运行正常(通过健康检查)。
  3. 停止旧版本的容器。

7. 监控更新过程

你可以通过以下命令监控更新进度:(服务命令为docker-compose.yml 中的service name)
docker service ps homecare-api_homecare-api
#或使用
docker stats

 

8. 验证服务

确保服务正常运行后,访问你的 API 接口,确认新版本已经生效。
curl http://192.168.2.218:8000/api/version
curl http://192.168.2.218:8000/api/health

 

9. 清理旧镜像(可选)

更新完成后,旧版本的容器会被自动清理。如果你希望清理旧镜像,可以运行:
docker image prune -a

 

这将删除所有未使用的镜像。

总结

通过上述步骤,你可以在单台机器上实现零停机滚动更新。关键在于:
  1. 构建镜像:确保在更新前构建好新版本的镜像。
  2. 使用 Docker Swarm 的滚动更新机制:通过 docker stack deploy 和更新配置,确保新旧版本的平滑切换。
如果你的项目代码有更新,只需重新构建镜像并更新 docker-compose.yml 文件中的镜像版本即可。

============ 欢迎各位老板打赏~ ===========

本文版权归Bruce's Blog所有,转载引用请完整注明以下信息:
本文作者:Bruce
本文地址:单台服务器应用不中断服务热部署滚动更新方案 | Bruce's Blog

发表评论

留言无头像?