Springboot2.4更新后提供了Spring Boot Maven 插件的 spring-boot:build-image 指令和 Gradle 插件的 bootBuildImage 任务现在可以直接发布 Docker 镜像到 Docker 注册中心了。
下面介绍Gradle的bootBuildImage方式
从网上找到一个图能说明这个过程
开发机器可以是windows系统,不安装docker,使用一个中间机器运行docker,实现docker的打包和发送。
1、docker机器开启远程访问
参阅我之前的文章:https://blog.csdn.net/u011943534/article/details/112134818
2、将harbor服务器的地址配置到daemon.json中支持http访问
vi /etc/docker/daemon.json
3、使用gradle创建springboot项目
创建过程略
4、build.xml添加bootBuildImage任务
bootBuildImage {
imageName = "192.168.100.96:80/library/${project.name}:0.0.1" //发布到harbor的镜像名称
publish = true //是否发布
docker {
host = "tcp://192.168.100.91:2375" //中间docker宿主机的地址
tlsVerify = false
// certPath = "/home/users/.minikube/certs"
publishRegistry {
username = "admin" //harbor用户名
password = "Harbor12345" //harbor密码
url = "http://192.168.100.96" //harbor地址
email = "76775081@qq.com" //邮箱
}
}
}
5、运行
运行gradle bootBuildImage
或在idea中点击运行bootBuildImage任务
第一次运行要下载依赖的镜像等,过程可能有点长
控制台输出:
16:06:01: Executing task 'bootBuildImage'...
> Task :compileJava UP-TO-DATE
> Task :processResources NO-SOURCE
> Task :classes UP-TO-DATE
> Task :bootJarMainClassName UP-TO-DATE
> Task :bootJar UP-TO-DATE
> Task :bootBuildImage
Building image '192.168.100.96:80/library/test2:0.0.1'
> Pulling builder image 'docker.io/paketobuildpacks/builder:base' ..................................................
> Pulled builder image 'paketobuildpacks/builder@sha256:984a3684db80a6d53214b81a9f21c31529bede5b447d6d6d82d94cd6734d2424'
> Pulling run image 'docker.io/paketobuildpacks/run:base-cnb' ..................................................
> Pulled run image 'paketobuildpacks/run@sha256:f393fa2927a2619a10fc09bb109f822d20df909c10fed4ce3c36fad313ea18e3'
> Executing lifecycle version v0.10.1
> Using build cache volume 'pack-cache-a271a2f39a50.build'
> Running creator
[creator] ===> DETECTING
[creator] 5 of 18 buildpacks participating
[creator] paketo-buildpacks/ca-certificates 1.0.1
[creator] paketo-buildpacks/bellsoft-liberica 6.0.0
[creator] paketo-buildpacks/executable-jar 3.1.3
[creator] paketo-buildpacks/dist-zip 2.2.2
[creator] paketo-buildpacks/spring-boot 3.5.0
[creator] ===> ANALYZING
[creator] Restoring metadata for "paketo-buildpacks/ca-certificates:helper" from app image
[creator] Restoring metadata for "paketo-buildpacks/bellsoft-liberica:jvmkill" from app image
[creator] Restoring metadata for "paketo-buildpacks/bellsoft-liberica:helper" from app image
[creator] Restoring metadata for "paketo-buildpacks/bellsoft-liberica:java-security-properties" from app image
[creator] Restoring metadata for "paketo-buildpacks/bellsoft-liberica:jre" from app image
[creator] Restoring metadata for "paketo-buildpacks/executable-jar:class-path" from app image
[creator] Restoring metadata for "paketo-buildpacks/spring-boot:helper" from app image
[creator] Restoring metadata for "paketo-buildpacks/spring-boot:spring-cloud-bindings" from app image
[creator] Restoring metadata for "paketo-buildpacks/spring-boot:web-application-type" from app image
[creator] ===> RESTORING
[creator] ===> BUILDING
[creator]
[creator] Paketo CA Certificates Buildpack 1.0.1
[creator] https://github.com/paketo-buildpacks/ca-certificates
[creator] Launch Helper: Reusing cached layer
[creator]
[creator] Paketo BellSoft Liberica Buildpack 6.0.0
[creator] https://github.com/paketo-buildpacks/bellsoft-liberica
[creator] Build Configuration:
[creator] $BP_JVM_VERSION 11.* the Java version
[creator] Launch Configuration:
[creator] $BPL_JVM_HEAD_ROOM 0 the headroom in memory calculation
[creator] $BPL_JVM_LOADED_CLASS_COUNT 35% of classes the number of loaded classes in memory calculation
[creator] $BPL_JVM_THREAD_COUNT 250 the number of threads in memory calculation
[creator] $JAVA_TOOL_OPTIONS the JVM launch flags
[creator] BellSoft Liberica JRE 11.0.9: Reusing cached layer
[creator] Launch Helper: Reusing cached layer
[creator] JVMKill Agent 1.16.0: Reusing cached layer
[creator] Java Security Properties: Reusing cached layer
[creator]
[creator] Paketo Executable JAR Buildpack 3.1.3
[creator] https://github.com/paketo-buildpacks/executable-jar
[creator] Process types:
[creator] executable-jar: java org.springframework.boot.loader.JarLauncher
[creator] task: java org.springframework.boot.loader.JarLauncher
[creator] web: java org.springframework.boot.loader.JarLauncher
[creator]
[creator] Paketo Spring Boot Buildpack 3.5.0
[creator] https://github.com/paketo-buildpacks/spring-boot
[creator] Creating slices from layers index
[creator] dependencies
[creator] spring-boot-loader
[creator] snapshot-dependencies
[creator] application
[creator] Launch Helper: Reusing cached layer
[creator] Web Application Type: Reusing cached layer
[creator] Spring Cloud Bindings 1.7.0: Reusing cached layer
[creator] 4 application slices
[creator] Image labels:
[creator] org.springframework.boot.spring-configuration-metadata.json
[creator] org.springframework.boot.version
[creator] ===> EXPORTING
[creator] Reusing layer 'paketo-buildpacks/ca-certificates:helper'
[creator] Reusing layer 'paketo-buildpacks/bellsoft-liberica:helper'
[creator] Reusing layer 'paketo-buildpacks/bellsoft-liberica:java-security-properties'
[creator] Reusing layer 'paketo-buildpacks/bellsoft-liberica:jre'
[creator] Reusing layer 'paketo-buildpacks/bellsoft-liberica:jvmkill'
[creator] Reusing layer 'paketo-buildpacks/executable-jar:class-path'
[creator] Reusing layer 'paketo-buildpacks/spring-boot:helper'
[creator] Reusing layer 'paketo-buildpacks/spring-boot:spring-cloud-bindings'
[creator] Reusing layer 'paketo-buildpacks/spring-boot:web-application-type'
[creator] Reusing 5/5 app layer(s)
[creator] Reusing layer 'launcher'
[creator] Reusing layer 'config'
[creator] Reusing layer 'process-types'
[creator] Adding label 'io.buildpacks.lifecycle.metadata'
[creator] Adding label 'io.buildpacks.build.metadata'
[creator] Adding label 'io.buildpacks.project.metadata'
[creator] Adding label 'org.springframework.boot.spring-configuration-metadata.json'
[creator] Adding label 'org.springframework.boot.version'
[creator] Setting default process type 'web'
[creator] *** Images (71860355d2cc):
[creator] 192.168.100.96:80/library/test2:0.0.1
Successfully built image '192.168.100.96:80/library/test2:0.0.1'
> Pushing image '192.168.100.96:80/library/test2:0.0.1' ..................................................
> Pushed image '192.168.100.96:80/library/test2:0.0.1'
Deprecated Gradle features were used in this build, making it incompatible with Gradle 7.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/6.5/userguide/command_line_interface.html#sec:command_line_warnings
BUILD SUCCESSFUL in 34s
4 actionable tasks: 1 executed, 3 up-to-date
16:06:36: Task execution finished 'bootBuildImage'.
6、登录harbor查看刚发布的镜像