写点什么

谷歌开源 Java 镜像构建工具 Jib

  • 2018-07-11
  • 本文字数:1246 字

    阅读完需:约 4 分钟

容器的出现让 Java 开发人员比以往任何时候都更接近“编写一次,到处运行”的工作流程,但要对 Java 应用程序进行容器化并非易事:你必须编写 Dockerfile,以 root 身份运行 Docker 守护进程,等待构建完成,最后将镜像推送到远程注册中心。但并非所有的 Java 开发人员都是容器专家,像以前那样只需要构建一个 JAR 包的日子已经结束了吗?

为了应对这一挑战,谷歌开源了一个 Java 容器化工具 Jib,有了这个工具,Java 开发人员可以使用他们熟悉的 Java 工具来构建容器。Jib 是一个快速而简单的容器镜像构建工具,它负责处理将应用程序打包到容器镜像中所需的所有步骤。它不需要你编写 Dockerfile 或安装 Docker,而且可以直接集成到 Maven 和 Gradle 中——只需要将插件添加到构建中,就可以立即将 Java 应用程序容器化。

Docker 构建流程:

Jib 构建流程:

Jib 如何让开发变得更美好

Jib 利用了 Docker 镜像的分层机制,将其与构建系统集成,并通过以下方式优化 Java 容器镜像的构建:

  1. 简单——Jib 使用 Java 开发,并作为 Maven 或 Gradle 的一部分运行。你不需要编写 Dockerfile 或运行 Docker 守护进程,甚至无需创建包含所有依赖的大 JAR 包。因为 Jib 与 Java 构建过程紧密集成,所以它可以访问到打包应用程序所需的所有信息。在后续的容器构建期间,它将自动选择 Java 构建过的任何变体。
  2. 快速——Jib 利用镜像分层和注册表缓存来实现快速、增量的构建。它读取你的构建配置,将你的应用程序组织到不同的层(依赖项、资源、类)中,并只重新构建和推送发生变更的层。在项目进行快速迭代时,Jib 只讲发生变更的层(而不是整个应用程序)推送到注册表来节省宝贵的构建时间。
  3. 可重现——Jib 支持根据 Maven 和 Gradle 的构建元数据进行声明式的容器镜像构建,因此,只要输入保持不变,就可以通过配置重复创建相同的镜像。

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

Jib 可作为 Maven 和 Gradle 的插件使用,并且只需要做出最少的配置。只需将插件添加到构建定义中并配置目标镜像即可。如果要将镜像推送到私有注册中心,要为 Jib 配置所需的秘钥。最简单的方法是使用 docker-credential-gcr 之类的凭证助手。Jib 还提供了其他的一些规则,用于将镜像构建到 Docker 守护进程。

在 Maven 中使用 Jib:

复制代码
<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>
复制代码
# Builds to a container image registry.
$ mvn compile jib:build
# Builds to a Docker daemon.
$ mvn compile jib:dockerBuild

在 Gradle 中使用 Jib:

复制代码
plugins {
id 'com.google.cloud.tools.jib' version '0.9.0'
}
jib.to.image = 'gcr.io/my-project/image-built-with-jib'
复制代码
# Builds to a container image registry.
$ gradle jib
# Builds to a Docker daemon.
$ gradle jibDockerBuild

Jib 项目地址: github.com/GoogleContainerTools/jib

2018-07-11 04:057977
用户头像

发布了 731 篇内容, 共 454.0 次阅读, 收获喜欢 2003 次。

关注

评论

发布
暂无评论
发现更多内容

还搞不明白,一次性给你总结好网络层概念

华为云开发者联盟

网络协议 IP 网络层 组网

20万字《网易智企技术合辑》重磅发布!

网易云信

人工智能 大数据 大前端 即时通讯IM 音视频技术

OpenHarmony标准设备应用开发(二)——布局、动画与音乐

OpenHarmony开发者

动画 OpenHarmony 音乐播放

Microchip推出模拟嵌入式SuperFlash技术解决边缘语音处理难题

Geek_2d6073

龙蜥开发者说:聊一聊我技术生涯的“三次迭代” | 第 3 期

OpenAnolis小助手

技术分享 开发者故事 龙蜥开发者说 突出贡献奖

web前端培训-通过JS 可以读取电脑上所有数据

@零度

JavaScript 前端开发

“既要性能,也要安全”,这样的Rust,谁不喜欢!

非凸科技

rust 编程语言 软件开发 招聘

教育行业可以用云管平台吗?有案例介绍吗?

行云管家

云计算 企业上云 云管平台 云管理

使用对等连接在天翼云两个用户的云网络之间架起一座天桥

天翼云开发者社区

菜鸟不菜,职场小白大变身

龙智—DevSecOps解决方案

Jira Jira插件 工作流扩展 并行审批 jira并行审批

芯片变得更复杂的今天,你需要最大限度复用IP资源

龙智—DevSecOps解决方案

芯片行业思考 芯片开发 ip复用 ip资源 芯片行业

实战天翼云云主机系统盘扩容

天翼云开发者社区

云主机

Java篇|忘记格式化代码,把女朋友鸽了

Jianmu

Java 自动化 持续集成 建木CI 格式化代码

中科柏诚:用数字技术纾困解难,助力中小企业恢复成长活力

联营汇聚

【CI/CD研讨会报名,截止最后一天】全程参会,还有惊喜奖品等你拿!

龙智—DevSecOps解决方案

cicd 持续集成 jenkins CI/CD 持续发布

为什么要做等保二级,有什么好处?

行云管家

网络安全 等保 等保2.0

大数据培训-Flink面试知识分享

@零度

flink 大数据开发

知识文档管理系统:帮助企业管理文档

小炮

知识管理 文档管理

java版gRPC实战之一:用proto生成代码

程序员欣宸

Java gRPC

向工程腐化开炮 | 治理思路全解

阿里巴巴终端技术

Java android 腐化治理 工程腐化

从0到100:基于微信小程序的羽毛球馆预约系统的开发笔记

CC同学

通过IPv6隧道实现天翼云云主机IPv4和IPv6双栈接入

天翼云开发者社区

网络

围绕用户体验持续进化 英特尔Evo平台打造开放、多元创新优势

科技新消息

Apache APISIX 2.13.0 发布

API7.ai 技术团队

开源 API网关 API Gateway Apache APISIX

使用天翼云主机组功能让云主机不放在同一个篮子里

天翼云开发者社区

#JiraHero:Soumen Deb——重塑 Jira Software 中的 Bug 工作流,提高可见性、简化开发流程

龙智—DevSecOps解决方案

Atlassian Jira

OceanBase 在证券行业基金资管场景落地实践与解决方案

OceanBase 数据库

证券 oceanbase

TDengine 助力智慧燃气,支撑数百万智能终端的接入管理

TDengine

2022年中国音频行业产品洞察分析

易观分析

音频体验 在线音频

【新布局】火绒安全企业产品Linux终端、macOS终端开启公测

火绒安全

macos Linux 服务器 终端安全 Windows Server

资产动态管理系统解决方案

低代码小观

资产管理 企业管理系统 CRM系统 客户关系管理系统 资产安全

谷歌开源Java镜像构建工具Jib_Java_Appu Goundan_InfoQ精选文章