转载

谷歌助力,快速实现 Java 应用容器化

谷歌助力,快速实现 Java 应用容器化

梁桂钊 | 作者

Google 在 2018 年下旬开源了一款新的 Java 工具 Jib,可以轻 松地将 Java  应用程序容器化。 通过 Jib,我们不需要编写 Dockerfile 或安装 Docker,通过集成到 Maven 或 Gradle 插件,就可以立即将 Java 应用程序容器化。

开源地址:https://github.com/GoogleContainerTools/jib

一、什么是 Jib

Jib 是一个快速而简单的容器镜像构建工具,它作为 Maven 或 Gradle 的一部分运行,不需要编写 Dockerfile 或运行 Docker 守护进程。它从 Maven 或 Gradle 中构建我们的 Docker 镜像, 并只将发生变更的层(而不是整个应用程序)推送到注册表来节省宝贵的构建时间。现在,我们对 Docker 构建流程和 Jib 构建流程进行对比。Docker 构建流程,如下所示。

谷歌助力,快速实现 Java 应用容器化 Jib 构建流程,则是这样的。

二、实战出真知

1. 构建一个简单的 Java 工程

我们编写一个简单的 Java 类。

紧接着,我们再创建一个 pom.xml 文件。

由于默认访问谷歌的 gcr.io 仓库,而国内访问 gcr.io 不稳定会经常导致网络超时,所以笔者使用了国内的阿里云镜像服务,那么就不需要访问谷歌的仓库了。现在,我们执行 mvn compile jib:build 命令进行自动化构建,它会从  <from> 拉取镜像,并把生成的镜像上传到  <to> 设置的地址。这里,笔者还通过  <jvmFlags> 设置了一些 JVM 参数。

此外,如果"登录失败,未授权",需要通过 docker login 登录鉴权一下。此外,更好的做法是,你可以考虑在Maven 中放置凭据。

最后,执行完成后,我们可以在阿里云镜像仓库获取镜像。

谷歌助力,快速实现 Java 应用容器化

大功告成,现在,我们来验证一把。我们通过  docker pull 拉取镜像,并运行。

执行结果,如下所示。

谷歌助力,快速实现 Java 应用容器化

2. 构建一个 SpringBoot 的可运行 Jar

我们来一个复杂一些的项目,构建一个 SpringBoot 的项目。关于 SpringBoot 的使用,可以阅读笔者之前的文章:http://blog.720ui.com/columns/springboot_all/。现在,我们首先需要搭建一个工程,并创建一个启动类。

同时,需要一个 Web 的接口。

紧接着,我们再创建一个 pom.xml 文件。

现在,我们执行 mvn compile jib:build 命令进行自动化构建。执行完成后,我们可以在阿里云镜像仓库获取镜像。

谷歌助力,快速实现 Java 应用容器化

现在,我们再来验证一把。我们通过  docker pull 拉取镜像,并运行。

执行结果,如下所示。

谷歌助力,快速实现 Java 应用容器化

现在,我们访问 http://localhost:8080/blog ,我们可以正常调用 API 接口了。

谷歌助力,快速实现 Java 应用容器化

3. 构建一个 WAR 工程

Jib 还支持 WAR 项目。如果 Maven 项目使用 war-packaging 类型,Jib 将默认使用 distroless Jetty 作为基础镜像来部署项目。要使用不同的基础镜像,我们可以自定义 <container><appRoot> ,  <container><entrypoint> 和  <container><args> 。以下是使用 Tomcat 镜像的案例。

三、源码地址

源码地址:https://github.com/lianggzone/jib-samples

附: 参考资料

  • https://github.com/GoogleContainerTools/jib

  • https://github.com/GoogleContainerTools/jib/tree/master/jib-maven-plugin

新书预售

近期热文

期待您的加入,一起成长

>>> 加入「后端圈」大家庭 (点击加入)<<< 

谷歌助力,快速实现 Java 应用容器化

谷歌助力,快速实现 Java 应用容器化

原文  https://mp.weixin.qq.com/s/dSbqUr8dBMlUEh7dl1xogA
正文到此结束
Loading...