JIB简介
Jib 是谷歌最新开源的 Java 应用的 Docker 镜像生成工具,可以通过 Gradle 或 Maven 直接生成镜像并上传到仓库而而不需要 Dockerfile 文件或者其他插件;Jib 支持将资源文件和类分层打包,可以大幅度提升生成镜像的速度。
为什么要用JIB?
- Docker架构CS设计存在缺陷,打包镜像时候会存在额外开销,会把Dockerfile同级目录下不需要的文件Copy给Docker Deamon,我们生产实际存在过node应用打包,缓存很多残留文件在Dockerfile同级的目录下,导致整个copy过程很慢。
- 传统SpringBoot打包没有办法最大利用镜像分层缓存技术,即使只改动一行代码,但是镜像层缓存的还是整个应用的BootJar,这个在镜像下载和推送的时候也是一个开销。
配置
在build.gradle中添加配置
|
|
构建镜像
在项目根目录下执行:
./gradlew clean jib
或
./gradlew clean jibDockerBuild(通过docker deamon构建)
构建成功可以看到
|
|

并且可以看到,在使用openjdk:8-jdk-alpine作为基础镜像的情况下,SpringBoot应用程序打出来的镜像只有100M出头,相比之前动则200-300M的镜像比缩小了近50%。
但这个created on 51 years ago 是肾么情况。。
通过 https://github.com/GoogleContainerTools/jib/issues/3030, 我们可以添加配置在build.gradle中:
|
|
但这样做会牺牲可重复性(but keep in mind that doing so will sacrifice reproducibility),详情请参考:https://github.com/GoogleContainerTools/jib/blob/master/docs/faq.md#why-is-my-image-created-48-years-ago