docker不停机部署

背景

最近做大疆项目时,后台更新部署时,机场和无人机就会掉线。设备自动重连注册时间比较长,应用长时间不可用。所以需要灰色发布服务。docker-compose的swarm模式可解决此问题。

服务构建脚本Dockerfile

# 使用官方Java基础镜像(推荐选择Alpine轻量版)
FROM openjdk:17-jdk-alpine
# 更新时区
RUN apk add --no-cache tzdata
ENV TZ=Asia/Shanghai
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
    && echo "Asia/Shanghai" > /etc/timezone \
# 设置工作目录
WORKDIR /app

# 将JAR文件复制到容器中(注意替换为你的JAR文件名)
COPY ./*.jar /app/
COPY ./lib/*.jar /app/lib/

ARG JAVA_OPTS="-server -Xmx512m -Xms512m -Xmn256m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256M -Xss256k -XX:+DisableExplicitGC -XX:+UseG1GC -XX:LargePageSizeInBytes=128m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/dumps/oom_dump.hprof -Djava.security.egd=file:/dev/./urandom"

RUN mkdir -p /app/dumps
RUN mkdir -p /app/logs
# 启动命令
ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -jar /app/${project.build.finalName}.jar > /app/logs/${project.build.finalName}.log 2>&1"]

容器编排配置docker-compose.yml

下面的内容没有一行是多余的,修改时要慎重考虑

version: '3.8'
networks:
  ${project.artifactId}-stack-proxy-tier: # 自定义的网络名称(可任意定义,但是需要提前创建)
    external: true

services:
  ${project.artifactId}: #docker应用服务名称,不能包含非法字符比如点
    image: ${project.build.finalName}:${project.version}
    deploy:
      replicas: 2  # 至少保持2个副本
      update_config:
        parallelism: 1    # 每次更新1个实例
        delay: 10s        # 新实例启动间隔
        order: start-first # 先启动新实例,再停止旧实例
      restart_policy:
        condition: any
    healthcheck:
      test: ["CMD-SHELL", "wget -q --spider http://localhost:23111/actuator/health || exit 1"]
      interval: 10s
      timeout: 5s
      retries: 3
      start_period: 20s
    volumes:
        - ./${project.build.finalName}.jar:/app/${project.build.finalName}.jar
        - ./lib:/app/lib
    environment:
      - VIRTUAL_HOST=192.168.1.4 # ip或者域名
      - VIRTUAL_PORT=23111 # 应用启动的端口
    networks:
      - ${project.artifactId}-stack-proxy-tier

  # 配置Nginx反向代理
  nginx:
    image: jwilder/nginx-proxy #专应用docker负载均衡、服务发现额镜像,功能非常强大
    environment:
      - TZ=Asia/Shanghai
      - HTTP_CHECK=/"actuator/health"
    ports:
      - "22011:80"
    volumes:
      - /var/run/docker.sock:/tmp/docker.sock:ro
    networks:
      - ${project.artifactId}-stack-proxy-tier
    depends_on:
      - ${project.artifactId}

启动脚本restart

linux

#!/bin/bash

# 设置脚本在遇到错误时立即退出
set -e

init()<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值