[译]Jib介绍:使用Jib来快速构建你的Java Docker 镜像

在一个群里看到有群友讨论Jib这个东西,大致了解了JibGoogle出品的一个便于Java开发者构建Dokcer镜像的工具。由于现在开发的项目也用到了Docker,开发使用下来的感受就是:每构建一个项目都得写一个Dockerfile(按理说这个应该的是DevOps的工作→_→),write a project,provide a Dockerfile.于是今天就看了下官方的关于Jib介绍的博客,打算试着翻译下(主要是文章不长,哈哈哈哈),翻译的不好,还请移步阅读原文,哈哈

原文博客链接:Introducing Jib — build Java Docker images better


容器使得Java开发者更加接近“write once,run anyway”(一次编写,到处运行)的工作流程,但是容器化一个Java应用程序并不是一件简单的事,通常的流程是,需要你编写为应用程序编写一个Dockerfile,以root运行Docker的守护进程,等待构建的完成,最后将构建好的镜像push到远程注册中心。并不是所有的Java开发者都是容器专家,仅仅是构建一个JAR(这句真不知如何翻译,“what happened to just building a JAR?”)

为了应对这种挑战(需要Java开发人构建容器),我们很高心向大家介绍Jib—谷歌一个开源的Java容器化工具,能够让Java开发者使用他们所熟悉的工具来构建容器。Jib是一个简单快读的容器构建工具,不需要你编写Dockerfile和安装Docker就能够处理将Java应用程序打包成一个容器镜像的所有步骤,通过集成MavenGradle,添加MavenGradle插件,就能快速的将你的Java应用程序打包成容器.

Docker构建常规流程:

docker-build-flow

使用Jib后构建容器的流程:

jib-build-flow

Jib是如何使得开发更便利的

Jib通过借鉴Docker layering(分层)的优点,并与构建系统集成,通过以下方式优化Java容器镜像构建过程:

  • 简单—Jib是基于Java实现的,并作为MavenGradle构建中的一部分运行,你不需要维护Dockerfile,启动Docker的守护进程,不用担心会创建一个添加了所有依赖包的大Jar包.由于JibJava构建过程的紧密结合,能够访问你所需要打包的程序,因此在容器构建后将自动检测到你的程序构建的变化。
  • 快速—Jib利用镜像layering和注册缓存来实现快速,增量的构建,Jib会读取你的构建配置,将你的程序组织成不同的layer(项目依赖,资源文件和class文件),,并且只会重新构建和push已更改的layer.在项目快速迭代的过程当中,每一次构建Jib只会push已更改的layer到注册中心而不是整个项目从而节省很多时间。
  • 可复用—Jib支持以声明的方式从MavenGradle的愿数据构建容器镜像,因此只要你输入保持不变,就可以通过更改配置来实现复用性

如何使用Jib来容器化你的应用

Jib可以作为MavenGradle的一个插件来使用,只需很少的配置。将Jib插件添加到你的构建定义当中并配置最终的镜像,如果你是注册中的中心是私服,确保在私服中为Jib配置了凭证 .最简单方法是使用credential helper 之类的工具,例如docker-credential-gcr . Jib同样提供构建镜像到Docker中.

Maven中使用Jib:

1
2
3
4
5
6
7
8
9
10
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>jib-maven-plugin</artifactId>
<version>0.9.0</version>
<configuration>
<to>
<image>gcr.io/my-project/image-built-with-jib</image>
</to>
</configuration>
</plugin>

命令:

1
2
3
4
# Builds to a container image registry.
$ mvn compile jib:build
# Builds to a Docker daemon.
$ mvn compile jib:dockerBuild

Gradle中使用Jib

1
2
3
4
plugins {
id 'com.google.cloud.tools.jib' version '0.9.0'
}
jib.to.image = 'gcr.io/my-project/image-built-with-jib'

命令:

1
2
3
4
# Builds to a container image registry.
$ gradle jib
# Builds to a Docker daemon.
$ gradle jibDockerBuild

我们希望大家使用Jib更便捷的开发JavaJib适用于大多数cloud providers,尝试使用Jib并一起改进它,GitHub地址:github.com/GoogleContainerTools/jib