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
相关推荐
打工的小王11 小时前
docker(三)具体项目的部署
运维·docker·容器
小北方城市网12 小时前
Redis 分布式锁高可用实现:从原理到生产级落地
java·前端·javascript·spring boot·redis·分布式·wpf
有风听风有雨看雨12 小时前
【Critical】docker unauthorized 2375
docker·容器·eureka
毕设源码-钟学长13 小时前
【开题答辩全过程】以 基于SpringBoot的智能书城推荐系统的设计与实现为例,包含答辩的问题和答案
java·spring boot·后端
Trank-Lw15 小时前
Docker Devcontainer 管理命令
运维·docker·容器
科技观察15 小时前
告别镜像拉取困境:毫秒镜像以“正规军”姿态重塑国内Docker加速生态
运维·docker·容器
热爱生活的五柒16 小时前
docker里面的文件没有写入权限,也无法使用sudo。docker镜像里某个文件夹没有创建文件夹权限。如何解决?
运维·docker·容器
永不停歇的蜗牛16 小时前
maven私库、二方包release、二房包snapshot之间的区别
java·maven
不吃香菜学java16 小时前
springboot左脚踩右脚螺旋升天系列-整合开发
java·spring boot·后端·spring·ssm
愈努力俞幸运18 小时前
windows 安装 docker
windows·docker·容器