39

Jib 1.0.0迎来通用版本——以前所未有的低门槛构建Java Docker镜像

 5 years ago
source link: http://dockone.io/article/8566?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

去年,我们开始着手帮助开发人员更轻松地实现Java应用程序的容器化转换。我们注意到,开发人员们在使用现有工具时往往面临诸多困难——例如构建速度太慢,Dockerfiles混合不堪,以及容器体积过大等等。

为了改变上述状况,我们开发出了Jib。Jib是一款开源工具,能够非常轻松地与您的Java应用程序实现集成——您无需安装Docker、无需运行Docker守护程序,甚至不需要编写Dockerfile。只需要在Maven或者Gradle build当中使用这款插件并运行构建过程,一切即可迎刃而解。Jib能够利用既有构建信息快速且高效地自动与您的应用程序完成适配。在Jib的帮助下,构建Java容器如今就像打包JAR文件一样简单。

我们于去年公布了Jib的beta测试版本,从那时开始,我们陆续收到了来自社区的诸多反馈与贡献,这也帮助我们更好地实现了其容器化体验。今天,我们高兴地宣布Jib 1.0.0通用版本的正式来临,其已经做好充分的准备,能够满足生产环境对于稳定性的严格要求。

我们将在这篇文章当中对版本中的主要变更做出说明,具体包括对WAR项目的支持、与Skaffold的集成以及面向Java的全新容器构建库Jib Core。

Jib 1.0版本中包含哪些重点?

Docker化WAR项目

Java编写的Web应用程序通常会被打包成WAR文件。如今,Jib已经能够对WAR项目进行容器化,且完全无需额外配置。您只需要直接运行以下命令:

Maven:

$ mvn package jib:build

Gradle:

$ gradle jib

该容器中的默认应用服务器为Jetty,但您也可以对基础镜像以及appRoot进行配置调整,从而使用Tomcat等其它服务器选项:

Maven(pom.xml):

<configuration>

<from>

<image>tomcat:8.5-jre8-alpine</image>

</from>

<to>

<image>gcr.io/my-project/my-war-image</image>

</to>

<container>

<appRoot>/usr/local/tomcat/webapps/my-webapp</appRoot>

</container>

</configuration>

Gradle(build.gradle):

jib {

from.image = 'tomcat:8.5-jre8-alpine'

to.image = 'gcr.io/my-project/my-war-image'

container.appRoot = '/usr/local/tomcat/webapps/my-webapp'

} 

感兴趣的朋友请参阅 Docker化Maven WAR项目Docker化Gradle WAR项目 的相关说明。

在Kubernetes开发当中与Skaffold for Java相集成

Skaffold是一款用于在Kubernetes上实现持续开发的命令行工具。我们将Skaffold与Jib加以集成,旨在实现Kubernetes之上的无缝化开发体验。Jib现在已经可以作为Skaffold当中的builder选项。

要在您的Java项目当中开始使用Skaffold,您首先需要安装Skaffold并向项目当中添加skaffold.yaml文件:

skaffold.yaml:



apiVersion: skaffold/v1beta4

kind: Config

build:

artifacts:

- image: gcr.io/my-project/my-java-image

# Use this for a Maven project:

jibMaven: {}

# Use this for a Gradle project:

jibGradle: {} 

请确保您已经把Kubernetes清单存放在k8s/目录当中,且Container规范中的镜像引用匹配至gcr.io/my-project/my-java-image位置。请查阅Skaffold库作为 参考

接下来,您可以使用以下命令启动Skaffold的持续开发功能:

$ skaffold dev --trigger notify

Skaffold能够帮助您消除在进行每一项变更之后,对应用程序进行重新构建与重新部署所带来的一系列繁琐步骤。Skaffold会利用Jib对您的应用程序进行容器化转换,而后在检测到变更时将其部署至您的Kubernetes集群当中。现在,您将能够把精力集中到真正重要的工作——编写代码身上。

Jib Core:在Java中构建Docker镜像

Jib运行在我们自己用于构建容器镜像的通用库之上,我们将这套库以Jib Core的形式进行发布,同时进行了一系列API改进。现在,您可以将Jib作为Maven以及Gradle插件,从而在无需Docker守护程序的前提下面向任意应用程序利用Java进行容器构建。

要使用Jib Core,您需要在项目当中添加以下文件:

Maven(pom.xml):

<dependency>

<groupId>com.google.cloud.tools</groupId>

<artifactId>jib-core</artifactId>

<version>0.1.1</version>

</dependency>

Gradle(build.gradle):

dependencies {

implementation 'com.google.cloud.tools:jib-core:0.1.1'

} 

以下是构建一套简单Docker镜像的操作示例。其将以基础镜像为起点,添加单一层、设置入口点,而后使用几行代码将镜像推送至远端注册表当中:

Jib.from("busybox")

.addLayer(Arrays.asList(Paths.get("helloworld.sh")), AbsoluteUnixPath.get("/"))

.setEntrypoint("sh", "/helloworld.sh")

.containerize(

   Containerizer.to(RegistryImage.named("gcr.io/my-project/hello-from-jib")

                                 .addCredential("myusername", "mypassword")));

我们也鼓励大家利用Jib Core构建 属于自己的自定义容器化解决方案 。欢迎您在我们的 Gitter频道 上共享利用Jib Core构建的一切项目。另外,您也可以参考我们发布的Jib Core其它使用示例,例如 Gradle构建脚本

丰富的功能,加上仍然简单易行的窗口化操作体验

利用Jib对Java应用程序进行容器化转换仍然与以往一样简单易行。如果您使用的是Maven,只需要将这款插件添加至pom.xml当中:

<plugin>

<groupId>com.google.cloud.tools</groupId>

<artifactId>jib-maven-plugin</artifactId>

<version>1.0.0</version>

<configuration>

<to>

  <image>gcr.io/my-project/my-java-image</image>

</to>

</configuration>

</plugin>

要构建一套镜像并将其推送至容器注册表,您可使用以下命令:

$ mvn compile jib:build

或者使用以下命令面向Docker守护程序进行构建:

$ mvn compile jib:dockerBuild

您现在甚至可以在无需修改pom.xml文件的前提下实现应用程序容器化,具体操作如下:

$ mvn compile com.google.cloud.tools:jib-maven-plugin:1.0.0:build -Dimage=gcr.io/my-project/my-java-image

若需了解更多细节信息,请参阅Jib Maven快速入门。

当配合Gradle使用Jib时,您需要将该插件添加至build.gradle当中:

plugins {

id 'com.google.cloud.tools.jib' version '1.0.0'

}



jib.to.image = 'gcr.io/my-project/my-java-image'

在此之后,您可以利用以下命令将应用程序容器化至目标容器注册表:

$ gradle jib

或者使用以下命令将其容器化至Docker守护程序:

$ gradle jibDockerBuild

若需了解更多细节信息,请参阅 Jib Gradle快速入门

立即开始使用

我们希望Jib能够帮助每一位朋友简化并加快自己的Java开发进程。要开始使用Jib,请参阅我们的 示例 ;此外,您也可使用Codelabs将Spring Boot应用程序或者Micronaut应用程序部署至Kubernetes当中。Jib能够与大多数Docker注册表提供程序以及托管注册表相兼容;请尽情尝试,并通过github.com/GoogleContainerTools/jib与我们分享您的心得体会。感谢!

原文链接: Jib 1.0.0 is GA—building Java Docker images has never been easier


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK