jib-maven-plugin是首选方案,无需本地docker环境和dockerfile,通过maven配置即可快速构建并推送镜像到本地或远程仓库,适合ci/cd场景。

推荐首选:jib-maven-plugin(免 Docker 环境)
它不依赖本地 Docker daemon,也不需要写 Dockerfile,所有镜像层逻辑由 Jib 在 JVM 内完成,构建快、可重现性强,特别适合 CI/CD 流水线。
- 在 pom.xml 的
<plugins></plugins>中添加:
<plugin><groupid>com.google.cloud.tools</groupid><artifactid>jib-maven-plugin</artifactid><version>3.4.0</version><configuration><from><image>eclipse/jetty:11-jre17-slim</image></from><to><image>localhost:5000/myapp</image><tags><tag>${project.version}</tag></tags></to><container><ports><port>8080</port></ports><jvmflags><jvmflag>-Xms256m</jvmflag></jvmflags></container></configuration></plugin>
- 推送前确保私有 registry 已运行(如
docker run -d -p 5000:5000 --name registry registry:2) - 执行命令:
mvn compile jib:build—— 自动构建并推送到localhost:5000/myapp - 若需认证,把用户名密码加到
~/.m2/settings.xml的<servers></servers>段,serverId要和插件配置中一致
灵活可控:dockerfile-maven-plugin(需本地 Docker)
适合需要完全掌控镜像结构、挂载卷、多阶段构建或集成证书等文件的场景。必须本地安装 Docker,并确保 daemon 正常运行。
在 Linux 上通过 Docker 运行 OpenClaw,并使用 Tailscale 实现远程访问。⚠️ 涉及 sudo、Docker、Tailscale和凭证挂载——请先查阅安全章节...
- 在项目根目录放一个 Dockerfile(与 pom.xml 同级):
FROM openjdk:17-jre-slim
VOLUME /tmp
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} app.jar
EXPOSE 8080
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
- pom.xml 中配置插件:
<plugin><groupid>com.spotify</groupid><artifactid>dockerfile-maven-plugin</artifactid><version>1.4.13</version><configuration><repository>localhost:5000/myapp</repository><tag>${project.version}</tag><buildargs><jar_file>target/${project.build.finalName}.jar</jar_file></buildargs></configuration></plugin>
- 执行:
mvn clean package dockerfile:build -DpushImage—— 先打包 JAR,再构建并推送 - Windows 用户注意:Docker Desktop 需开启 WSL2 或 Hyper-V,且勾选 “Expose daemon on tcp://localhost:2375 without TLS”
Spring Boot 原生支持(零配置,但限制多)
Spring Boot 2.3+ 内置了 spring-boot:build-image 目标,底层调用 Paketo builder,无需额外插件,但对基础镜像和构建环境有强依赖。
- 确保 pom.xml 继承
spring-boot-starter-parent,且已配置spring-boot-maven-plugin - 执行:
mvn spring-boot:build-image -Dspring-boot.build-image.imageName=localhost:5000/myapp:${project.version} - 默认使用
gcr.io/paketo-buildpacks/bellsoft-liberica,若网络受限,可通过-Dspring-boot.build-image.builder指定国内镜像源 - 不支持自定义 ENTRYPOINT 或 COPY 外部文件(如 .pem 证书),复杂场景仍需前两种方式
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










