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
相关推荐
java知路1 小时前
linux yum 下载docker安装包及依赖安装包,并离线安装
linux·运维·docker
仙俊红1 小时前
SpringBoot启动原理
java·spring boot·后端
没有退路那我就不要散步1 小时前
kube-proxy优化
docker·容器·kubernetes
摇滚侠3 小时前
SpringMVC 入门到实战 视图解析器 44-48
java·spring·maven·intellij-idea
ai产品老杨3 小时前
解耦安防碎片化:基于 Docker 与边缘计算的 AI 视频管理平台架构演进(附 GB28181/RTSP 统一接入与源码交付实践)
人工智能·docker·边缘计算
記億揺晃着的那天3 小时前
告别误操作!Spring Boot 多环境配置隔离与启动守卫实战
java·spring boot·后端·环境隔离
ai产品老杨3 小时前
基于 Docker 与边缘计算的智能安防架构:解耦 GB28181/RTSP 多协议接入与异构芯片部署(附源码交付与 95% 降本实践)
docker·架构·边缘计算
xiami_world4 小时前
私有化部署协同白板选型指南:从Docker容器化到信创全栈适配的架构实践
运维·人工智能·docker·ai·持续部署
skywalker_114 小时前
SpringBoot速通(实战教学)
java·spring boot·redis·rpc·ssm·mybatis-plus
码不停蹄的玄黓4 小时前
Spring Boot 实现过滤器(Filter)三种常用方式
java·spring boot·后端