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
相关推荐
钱彬 (Qian Bin)9 小时前
项目实践14—全球证件智能识别系统(切换回SQLite数据库并基于Docker实现离线部署和日常管理)
运维·docker·容器·fastapi·证件识别
岚天start9 小时前
Docker部署NGINX实现服务四层转发方案
服务器·nginx·docker
牛奔10 小时前
docker compose up 命令,默认配置文件自动查找规则
java·spring cloud·docker·容器·eureka
工具罗某人10 小时前
docker快速部署jenkins
java·docker·jenkins
BigBigHang10 小时前
【docker】离线设备安装镜像
运维·docker·容器
学好statistics和DS10 小时前
Docker文件与本地文件,系统
运维·docker·容器
liuc031710 小时前
docker下安装SearXNG
运维·docker·容器
oMcLin10 小时前
如何在CentOS 8上配置并优化Docker与Kubernetes结合的容器集群,提升微服务部署效率?
docker·kubernetes·centos
JavaGuru_LiuYu11 小时前
Spring Boot 整合 SSE(Server-Sent Events)
java·spring boot·后端·sse
彭于晏Yan11 小时前
Springboot实现数据脱敏
java·spring boot·后端