选择基础镜像
eclipse-temurin:17-jre-alpine
)或匹配JDK版本的镜像(如JDK 21用amazoncorretto:21
)。dockerfile
FROM eclipse-temurin:17-jre-alpine
优化镜像分层
dockerfile
COPY target/*.jar app.jar RUN java -Djarmode=layertools -jar app.jar extract COPY ./dependencies/ /app/ COPY ./spring-boot-loader/ /app/ COPY ./snapshot-dependencies/ /app/ COPY ./application/ /app/ ENTRYPOINT ["java", "org.springframework.boot.loader.JarLauncher"]
此方案将依赖、资源文件分到独立层,代码变更时仅重建应用层。最小化镜像体积
dockerfile
FROM maven:3.8.6 AS build COPY . /app RUN mvn -f /app/pom.xml clean package FROM eclipse-temurin:17-jre-alpine COPY --from=build /app/target/*.jar /app.jar EXPOSE 8080 ENTRYPOINT ["java","-jar","/app.jar"]
使用Maven插件一键构建
Spotify插件(传统方案):
com.spotify
docker-maven-plugin
my-registry/app:${version}
./
执行mvn docker:build
构建镜像。
Jib插件(推荐新方案):
无需Dockerfile,复用构建缓存:
com.google.cloud.tools
jib-maven-plugin
my-registry/app:${version}
执行mvn jib:build
自动推送到仓库。
推送到私有仓库
registry.example.com/app:${version}
${docker.user}
${docker.password}
支持Docker Hub、Harbor等仓库。安全配置
dockerfile
RUN adduser -D appuser && chown appuser /app.jar USER appuser
资源与网络优化
docker run -m 512m --cpus 1.0 ...
network_mode: host
提升网络性能(需评估安全性)。配置管理
bash
docker run -e SPRING_DATASOURCE_URL=jdbc:postgresql://db/app ...
bash
docker run -v /host/config:/app/config ...
方案 | 优点 | 适用场景 |
---|---|---|
Dockerfile手动构建 | 灵活可控,兼容性强 | 需深度定制镜像的场景 |
Jib插件 | 无需Docker守护进程,构建速度快 | 追求CI/CD效率的团队 |
Buildpacks | 零配置,自动探测运行时 | 快速验证原型项目 |
关键决策点:
- 若需最大化构建速度 → 选Jib
- 若需精细控制镜像层 → 用分层Dockerfile
- 若企业有统一镜像仓库 → 优先私有仓库推送
生产环境务必配置资源限制与安全策略,避免容器资源耗尽或被未授权访问。