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