2团
Published on 2024-08-20 / 33 Visits
0
0

简易Spring Boot应用Docker compose部署模板

1. 前言

近期使用Spring Boot编写了一些简单的工具应用,部署的时候图省事,不想编写开机自启动脚本并且完成Linux主机定时任务配置,因此想着通过Docker compose解决部署问题。

主要需要完成如下步骤:

  • 完成日志配置(指定日志生成路径/app/logs);

  • 创建Docker file文件;

  • 创建Docker compose文件。

2. 添加日志配置

在Spring Boot的application.yml文件中添加如下日志配置(对于工具应用足够)。

logging:
  pattern:
    file: "%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %class{36}.%method %L - %msg%n"
  logback:
    rollingpolicy:
      file-name-pattern: ${logging.file.path}/${spring.application.name}-%d{yyyy-MM-dd}.%i.log
      max-file-size: 100MB
      max-history: 30
      total-size-cap: 20GB
  file:
    path: /app/logs
    name: ${logging.file.path}/${spring.application.name}.log
  level:
    root: info

3. 创建Dockerfile

FROM openjdk:17-jdk-alpine

# 设置工作目录
WORKDIR /app

# 复制应用的JAR文件到容器中
COPY index*.jar /app/index.jar

# 复制配置文件
COPY application.yaml /app/application.yaml

# 创建logs目录
RUN mkdir -p /app/logs

# 暴露应用运行的端口
EXPOSE 8080

# 运行Java应用
ENTRYPOINT ["sh", "-c", "java $JVM_OPTIONS -jar /app/index.jar"]

上述文件中(index-0.0.1.jar请更换为实际打包文件名):

  • 暴露端口8080供外界访问(如果工具应用未使用web服务,可将端口暴露配置删除);

  • 通过$JVM_OPTIONS设置应用启动的JVM参数,具体数值可在docker compose文件中设置;

  • 若工具有调试的需要,可尝试将基本镜像openjdk:17-jdk-alpine更换为openjdk:17-jdk

4. 创建docker-compose.yml

version: '3.8'

services:
  app:
    image: index-app:latest
    build:
      context: .
      dockerfile: Dockerfile
      args:
          - JVM_OPTIONS=-Xms512m -Xmx512m
    ports:
      - "8080:8080"
    volumes:
      - ./logs:/app/logs
    restart: always

如上,将Dockerfile、docker-compose.yml以及Spring Boot打包文件放置于同文件夹下,执行命令docker compose up -d即可启动应用,并且能开机自启动。

需要注意将JVM_OPTIONS参数置于build.args下,Dockerfile才能正确读取。

5. 创建升级脚本

每次更新jar包,需要重建容器,可以执行以下脚本(upgrade.sh):

#!/bin/bash

# 下线容器组 & 删除镜像
docker compose down --rmi all

# 重新后台启动容器
docker compose up -d


Comment