方法。
这篇文章是关于利用Jib,更具体地说是jib-maven-plugin来构建容器化的spring boot应用程序。Jib可以让不写Dockerfile就能实现Docker打包。
这篇文章中使用的演示项目可以在这里找到。
什么是Jib
Jib带来的是,它允许您通过简单地将插件添加到您选择的构建工具(Maven或Gradle)来创建容器。没有额外的文件,只需几行配置,它处理将应用程序打包到容器映像的所有步骤。
使用Google云团队自己的话:
Jib是来自Google的开源Java容器,它允许Java开发人员使用他们所知道的Java工具构建容器。它不需要您编写Dockerfile或安装了docker,它直接集成到Maven和Gradle中。
在“传统”Java到Docker映像构建流程中,我们需要安装Dockerfile和docker守护进程。在Jib构建流程中,您只需要插件项目的构建文件。
构建
设置Java开发环境不属于本文的范围,但让我们试一试!
- 确保安装了Java 8+。
- 我们将使用maven,所以如果不存在安装maven 3.5+。
- 确保已安装 docker ,如果您使用的是Linux,则您的用户具有docker访问权限。
- 安装了您最喜欢的IDE(eclipse或idea)
创建一个基本的spring boot应用程序
这可以通过spring initializr或您喜欢的IDE来完成。如果您使用了spring initializr,则需要将新创建的maven项目导入IDE(eclipse / idea)。
将jib-maven-plugin添加到您的pom.xml中
对于应用程序的基本本地存储镜像,请在pom.xml以下内容中配置jib-maven-plugin :
<build> |
编译应用程序并构建镜像
现在我们可以构建应用程序并检查镜像是否在我们的本地docker存储库中创建。
通过终端转到项目的根文件夹,然后执行:
mvn compile jib:dockerBuild
Maven构建日志应包含如下行:
[INFO] — — jib-maven-plugin:0.10.1:dockerBuild (default-cli) @ spring-boot-jib — - |
只要没有错误,我们就会看到maven“ Built image to Docker daemon as springbootjib”我们都已经确定了。
运行docker镜像
我们应该在本地存储库中拥有新的docker镜像。我们可以通过执行检查docker image ls,我们应该看到类似于这样的镜像:
springbootjib latest eb4bea693650 3 hours ago 135MB
请注意非常小的(135mb)镜像大小,这是由于gcr.io/distroless/javaJib默认使用的镜像(我们将在稍后看到如何更改)。
因此,现在我们可以像往常一样通过键入docker run -it springbootjib并验证应用程序是否按预期运行来运行镜像。
配置Jib插件以微调我们的Docker镜像
我们可以深入挖掘,并进一步配置Jib插件,以适应几种常见的场景,例如登录docker存储库,暴露端口,选择特定的基本映像等。
例如,在以下配置中:
- 从openjdk:alpine(从Docker Hub拉出)的基础构建的
- push推送到localhost:5000/springbootjib:0.0.1-SNAPSHOT,localhost:5000/springbootjib:alpine和localhost:5000/springbootjib:latest
- 运行调用: java -Xms256m -Xdebug -cp app/libs/*:app/resources:app/classes com.jibdemo.SpringBootJibApplication some args
- 公开端口8001用于tcp(默认),端口8002和8003用于udp
- 设置一个标签(名称:springbootjib)
- 构建为OCI格式
<configuration> |
在,您可以再次构建镜像,并查看maven日志中的差异:
[INFO] --- jib-maven-plugin:0.10.1:dockerBuild (default-cli) @ spring-boot-jib --- |
请注意,在上面的日志段中,插件openjdk:alpine从Docker Hub中提取镜像,将镜像构建为三个不同标记的版本,并将它们存储在我们的本地存储库中。
为什么用Jib?
- 不需要维护Dockerfile,运行Docker守护程序,甚至无需创建具有所有依赖项的胖JAR。
- 利用图像分层和注册表缓存来实现快速,增量的构建。
- 只要输入保持不变,就可以将其配置为创建可重现的构建映像。
结论
如果使用过像spotify和fabric8那样的其他maven插件来为java应用程序创建docker图像,建议你使用Google的jib,它需要的文件少于fabric8的插件,并且(我认为)比spotify的插件更容易配置。我当然建议你试一试!