如何使用Google的Jib将SpringBoot应用Docker化

栏目: Java · 发布时间: 7年前

内容简介:方法。这篇文章是关于利用Jib,更具体地说是这篇文章中使用的演示项目可以在

方法。

这篇文章是关于利用Jib,更具体地说是 jib-maven-plugin 来构建容器化的spring boot应用程序。Jib可以让不写Dockerfile就能实现 Docker 打包。

这篇文章中使用的演示项目可以在 这里 找到。

什么是Jib

Jib带来的是,它允许您通过简单地将插件添加到您选择的构建工具(Maven或Gradle)来创建容器。没有额外的文件,只需几行配置,它处理将应用程序打包到容器映像的所有步骤。

使用Google云团队 自己的话

Jib是来自Google的开源 Java 容器,它允许Java开发人员使用他们所知道的Java工具构建容器。它不需要您编写Dockerfile或安装了docker,它直接集成到 MavenGradle中

在“传统”Java到Docker映像构建流程中,我们需要安装Dockerfile和docker守护进程。在Jib构建流程中,您只需要插件项目的构建文件。

构建

设置Java开发环境不属于本文的范围,但让我们试一试!

  1. 确保安装了 Java 8+
  2. 我们将使用maven,所以如果不存在安装 maven 3.5+
  3. 确保已 安装  docker ,如果您使用的是Linux,则 您的用户具有docker访问权限
  4. 安装了您最喜欢的IDE( eclipseidea

创建一个基本的spring boot应用程序

这可以通过spring initializr 或您喜欢的IDE来完成。如果您使用了spring initializr,则需要将新创建的maven项目导入IDE( eclipseidea )。

将jib-maven-plugin添加到您的pom.xml中

对于应用程序的基本本地存储镜像,请在pom.xml以下内容中配置jib-maven-plugin :

<build>
   <plugins>
      <plugin>
        ...
      </plugin>
      ...
      <plugin>
         <groupId>com.google.cloud.tools</groupId>
         <artifactId>jib-maven-plugin</artifactId>
         <version>0.10.1</version>
         <configuration>
            <to>
               <image>springbootjib</image>
            </to>
         </configuration>‘

编译应用程序并构建镜像

现在我们可以构建应用程序并检查镜像是否在我们的本地docker存储库中创建。

通过终端转到项目的根文件夹,然后执行:

mvn compile jib:dockerBuild

Maven构建日志应包含如下行:

[INFO] — — jib-maven-plugin:0.10.1:dockerBuild (default-cli) @ spring-boot-jib — -
<p>[INFO] 
<p>[INFO] Containerizing application to Docker daemon as springbootjib…
<p>[WARNING] Base image ‘gcr.io/distroless/java’ does not use a specific image digest — build may not be reproducible
<p>[INFO] Getting base image gcr.io/distroless/java…
<p>[INFO] Building dependencies layer…
<p>[INFO] Building resources layer…
<p>[INFO] Building classes layer…
<p>[INFO] Finalizing…
<p>[INFO] 
<p>[INFO] Container entrypoint set to [java, -cp, /app/resources:/app/classes:/app/libs/*, com.jibdemo.SpringBootJibApplication]
<p>[INFO] Loading to Docker daemon…
<p>[INFO] 
<p>[INFO] Built image to Docker daemon as springbootjib

只要没有错误,我们就会看到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>
  <from>
    <image>openjdk:alpine</image>
  </from>
  <to>
    <image>localhost:5000/springbootjib:0.0.1-SNAPSHOT</image>
    <credHelper>osxkeychain</credHelper>
    <tags>
      <tag>alpine</tag>
      <tag>latest</tag>
    </tags>
  </to>
  <container>
    <jvmFlags>
      <jvmFlag>-Xms256m</jvmFlag>
      <jvmFlag>-Xdebug</jvmFlag>
    </jvmFlags>
    <ports>
      <port>8081</port>
      <port>8082-8083/udp</port>
    </ports>
    <labels>
      <name>springbootjib</name>
    </labels>
    <format>OCI</format>
  </container>
</configuration>

在,您可以再次构建镜像,并查看maven日志中的差异:

[INFO] --- jib-maven-plugin:0.10.1:dockerBuild (default-cli) @ spring-boot-jib ---
<p>[INFO] 
<p>[INFO] Containerizing application to Docker daemon as localhost:5000/springbootjib:0.0.1-SNAPSHOT, localhost:5000/springbootjib:alpine, localhost:5000/springbootjib...
<p>[INFO] Getting base image openjdk:alpine...
<p>[INFO] Building dependencies layer...
<p>[INFO] Building resources layer...
<p>[INFO] Building classes layer...
<p>[INFO] The base image requires auth. Trying again for openjdk:alpine...
<p>[INFO] Retrieving registry credentials for registry.hub.docker.com...
<p>[INFO] Finalizing...
<p>[INFO] 
<p>[INFO] Container entrypoint set to [java, -Xms256m, -Xdebug, -cp, /app/resources:/app/classes:/app/libs/*, com.jibdemo.SpringBootJibApplication]
<p>[INFO] Loading to Docker daemon...
<p>[INFO] 
<p>[INFO] Built image to Docker daemon as localhost:5000/springbootjib:0.0.1-SNAPSHOT, localhost:5000/springbootjib:alpine, localhost:5000/springbootjib

请注意,在上面的日志段中,插件openjdk:alpine从 Docker Hub中 提取镜像,将镜像构建为三个不同标记的版本,并将它们存储在我们的本地存储库中。

为什么用Jib?

  • 不需要维护Dockerfile,运行Docker守护程序,甚至无需创建具有所有依赖项的胖JAR。
  • 利用图像分层和注册表缓存来实现快速,增量的构建。
  • 只要输入保持不变,就可以将其配置为创建可重现的构建映像。

结论

如果使用过像 spotifyfabric8 那样的其他maven插件来为java应用程序创建 docker 图像,建议你使用Google的jib,它需要的文件少于fabric8的插件,并且(我认为)比spotify的插件更容易配置。我当然建议你试一试!


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

High Performance JavaScript

High Performance JavaScript

Nicholas C. Zakas / O'Reilly Media / 2010-4-2 / USD 34.99

If you're like most developers, you rely heavily on JavaScript to build interactive and quick-responding web applications. The problem is that all of those lines of JavaScript code can slow down your ......一起来看看 《High Performance JavaScript》 这本书的介绍吧!

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具