技术解析
spring-boot-maven-plugin
自带的生成镜像功能超级慢。因为他要访问 Github 里面的东西,自己的电脑还好,CI 就扛不住了,在墙内的同事也扛不住了,而且那套逻辑也比较复杂灵活,不好掰出来里面的东西,这个一票否决。
使用这种方式不需要每个工程一个Dockerfile
,比如你想给所有项目的 Dockerfile 修改一些配置,此处修改一次,所有工程通吃。
这个一个 pom 工程,deploy 到私服上之后,下面的 Spring Boot 工程可以使用此 pom 作为 parent 代替 spring-boot-starter-parent 。如果你们已经有自定义的通用 pom,这个也可以被轻松整合进去。
利用了 Spring boot 2.3 引入的分层构建,每次重新构建镜像会复用上面的层,导致上传一次镜像到远程仓库之后,后面上传镜像都很快,从本来的要上传几十上百 M 缩减到现在的几 M 甚至 1M 不到(这个根据自己的工程体量)。Spring Boot 2.3 以下不可使用
保持清爽,不堆重复配置,按照约定大于配置原则,不像某些工程,一个 pom 光
都几百行,其实大部分内容都是从网上上拷的,起不到作用。这个 pom 指定了很少的只是必须的内容,你可以轻轻松松的把其揉进已存的 pom 里面去。
按照
4.0.0
com.example
spring-boot-docker-parent
0.0.1-SNAPSHOT
pom
11
UTF-8
2.4.5
org.springframework.boot
spring-boot-dependencies
${version.spring-boot}
pom
import
org.apache.commons
commons-collections4
4.4
commons-io
commons-io
2.8.0
com.google.guava
guava
30.1.1-jre
com.google.code.findbugs
annotations
3.0.1u2
provided
org.jetbrains
annotations
20.1.0
provided
org.mapstruct
mapstruct
${version.mapstruct}
org.mapstruct
mapstruct-processor
${version.mapstruct}
抗投诉服务器
maven-source-plugin
3.2.1
attach-sources
jar
maven-compiler-plugin
3.8.1
spring-boot-package
${basedir}/src/main/resources/config/application.properties
org.codehaus.gmaven
groovy-maven-plugin
2.1.1
copy-Dockerfile
package
execute
org.springframework.boot
spring-boot-maven-plugin
${version.spring-boot}
spring-boot-package
package
repackage
${start-class}
${project.build.directory}/docker-build/
io.fabric8
docker-maven-plugin
0.34.1
docker-build-push
package
build
push
your.registry.domain/${dockerImageGroupAndName}
${project.build.directory}/docker-build/
${project.version}
${project.build.finalName}.jar
xxx-release-deploy
https://XXX/repository/maven-releases/
xxx-snapshot-deploy
https://XXX/repository/maven-snapshots/