Spring Boot Maven项目构建Docker镜像

Spring Boot Maven项目构建Docker镜像

构建Docker镜像常规做法是写个Dockerfile,如果你使用 Spring Boot 2.3+,官方内置了对 Cloud Native Buildpacks 的支持。你完全不需要写 Dockerfile,直接一行命令就能生成生产级镜像。

shell 复制代码
# 它会自动检测你的 JDK 版本(默认会用最新的 LTS),并把打包好的 JAR 自动放入镜像中,且优化了分层。
mvn spring-boot:build-image -Dspring-boot.build-image.imageName=my-app-name:1.0

对于父子结构的 Spring Cloud 项目,构建命令的关键在于:在父工程目录下运行,并利用 Maven 的"项目限定符" (-pl) 来指定具体的子模块。

shell 复制代码
mvn clean spring-boot:build-image -pl order-service -am -DskipTests

或者全量构建,一次性构建所有微服务:

shell 复制代码
# Maven 会遍历所有子模块,只要发现该模块有 Spring Boot 插件配置,就会依次为其生成 Docker 镜像。
mvn clean install -DskipTests
mvn clean spring-boot:build-image -DskipTests

需要在pom.xml文件中添加,这是 Spring Boot 项目的标配,如果是继承spring-boot-starter-parent,那么就会有这个插件了:

xml 复制代码
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
    </plugins>
</build>

怎么传递参数:

使用 spring-boot:build-image 构建的镜像,本质上是一个标准化的 Docker 镜像。它内部使用了 Cloud Native Buildpacks,默认的启动入口(Entrypoint)会自动处理 JVM 参数和 Spring 配置。

要指定参数主要有以下做法:

运行时通过环境变量传参

shell 复制代码
# 环境变量名建议使用大写加下划线(如 SPRING_CLOUD_NACOS_DISCOVERY_IP),Spring Boot 会自动将其映射为配置文件中的 spring.cloud.nacos.discovery.ip
docker run -d \
  --name my-service \
  -e SPRING_CLOUD_NACOS_DISCOVERY_IP=192.168.1.100 \
  -e JAVA_TOOL_OPTIONS="-Xms512m -Xmx512m" \
  my-app-name:latest

通过命令行参数(Arguments)传参

shell 复制代码
# 使用传统的 --参数名 方式,在镜像名之后直接添加
docker run -d my-app-name:latest --spring.cloud.nacos.discovery.ip=192.168.1.100
相关推荐
devpotato1 天前
Spring Boot mTLS 报 `keystore password was incorrect`:不一定是密码错了
spring boot·tls·pkcs12·mtls
皮皮冰燃1 天前
docker-18-WSL中安装docker并部署flask服务
docker·容器·flask
少年白char1 天前
整理上万首音乐后的完整工作流:下载、刮削、播放与避坑指南
docker·nas·musictag·音乐刮削·音乐标签
keep one's resolveY1 天前
SpringBoot实现重试机制的四种方案
java·spring boot·后端
阿丰资源1 天前
基于Spring Boot的电影城管理系统(直接运行)
java·spring boot·后端
消失的旧时光-19431 天前
Spring Boot 工程化进阶:统一返回 + 全局异常 + AOP 通用工具包
java·spring boot·后端·aop·自定义注解
StockTV1 天前
印度股票实时数据 NSE和BSE的实时行情、K 线及指数数据
java·开发语言·spring boot·python
橘子海全栈攻城狮1 天前
【最新源码】养老院系统管理A013
java·spring boot·后端·web安全·微信小程序
敖正炀1 天前
反模式与排查宝典:Spring Boot 自动配置与核心机制的常见陷阱
spring boot