摘要:本文主要介绍SpringBoot项目资源分离打包方式和基于该方式的maven+docker镜像构建一体化流程;资源分离方式,可以极大程度方便现场临时解决问题,而不用出新的镜像。
SpringBoot项目
我本地案例是基于
SpringBoot3的,默认2.X的版本都是支持的。
默认的pom.xml的build配置
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
资源分离方式打包配置
需要新增一个
plugin,如下
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>unpack</id>
<phase>package</phase>
<goals>
<goal>unpack</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>${project.groupId}</groupId>
<artifactId>${project.artifactId}</artifactId>
<version>${project.version}</version>
</artifactItem>
</artifactItems>
</configuration>
</execution>
</executions>
</plugin>
- 然后执行
mvn clean install -Dmaven.test.skip=true打包
target文件夹下会出现dependency文件夹,里面的东西就是我们需要的
---BOOT-INF
---META-INF
---org
这种资源分开的启动方式,切换到
BOOT-INF目录
windows:java -cp classes;lib/* com/github/huzhihui/statics/StaticsApplicationlinux:java -cp classes:lib/* com/github/huzhihui/statics/StaticsApplication
基于maven的docker镜像构建
使用的
maven插件io.fabric8的docker-maven-plugin,新增配置如下
github:github.com/fabric8io/d…- 官方文档:dmp.fabric8.io/#pull-vs-pu…
<plugin>
<groupId>io.fabric8</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.37.0</version>
<configuration>
<dockerHost>docker2375开放的端口</dockerHost>
<registry>你的镜像仓库</registry>
<authConfig>
<push>
<username>镜像仓库的用户名</username>
<password>镜像仓库的密码</password>
</push>
</authConfig>
<images>
<image>
<name>springboot/sp3:${image.tag}</name>
<build>
<dockerFile>${project.basedir}/src/main/docker/Dockerfile</dockerFile>
<assemblies>
<assembly>
<name>target</name>
<descriptorRef>artifact</descriptorRef>
<targetDir>${project.basedir}/target</targetDir>
</assembly>
</assemblies>
</build>
</image>
</images>
</configuration>
</plugin>
新增Dockerfile文件
随便指定目录,我写在
src/main/docker/Dockerfile
FROM huzhihui/jdk8:latest
VOLUME /tmp
ARG DEPENDENCY=target/dependency
COPY ${DEPENDENCY}/BOOT-INF /app/BOOT-INF
COPY ${DEPENDENCY}/META-INF /app/META-INF
COPY ${DEPENDENCY}/org /app/org
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom", "-XX:+UnlockExperimentalVMOptions", "-XX:+UseCGroupMemoryLimitForHeap", "-cp","/app/BOOT-INF/classes:/app/BOOT-INF/lib/*", "com/github/huzhihui/MinIoApplication"]