50万奖金+官方证书,深圳国际金融科技大赛正式启动,点击报名 了解详情
写点什么

谷歌开源 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:058548
用户头像

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

关注

评论

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

直播系统源码——短视频直播系统源码

开源直播系统源码

软件开发 直播系统 开源源码 短视频直播源码

采用Dubbo?还是Spring Cloud?

博文视点Broadview

ID生成器

ES_her0

7月月更

mysql进阶(九)多表查询

No Silver Bullet

MySQL 多表查询 7月月更

C# 使用ListView控件实现文件查看大图标小图标,详细信息效果。

IC00

C# 7月月更

NFT市场格局仍未变化,Okaleido能否掀起新一轮波澜?

西柚子

零信任架构的实施规划——针对联邦系统管理员的规划指南

权说安全

即刻报名|前沿技术探索:如何让 Spark 更强劲、更灵活

Kyligence

spark 开源

Kyligence 正式支持 Amazon EMR Serverless,构建高效低成本云上数据分析

Kyligence

Cloud Kyligence Amazon EMR

SAP Fiori Launchpad 应用的两个实用技巧分享

汪子熙

JavaScript SAP SAP UI5 ui5 7月月更

重新认识生命世界,也重新认识我们自己

图灵教育

科普

CSS重复线性渐变之画格子

南城FE

CSS 前端 7月月更

LeetCode-104. 二叉树的最大深度(java)

bug菌

Leet Code 7月月更

CRMEB 多商户这些功能,你都用过吗?

CRMEB

OpenHarmony littlefs文件系统存储结构与IO性能优化分析

OpenHarmony开发者

OpenHarmony

龙蜥开发者说:社区首个支持 LoongArch架构的操作系统构建之路 | 第 9 期

OpenAnolis小助手

开源 操作系统 龙蜥开发者说 龙芯 LoongArch 架构

ABAP-OOALV实现

桥下本有油菜花

SAP abap

《黑客与画家》作者:18 个会杀死初创公司的错误

雨果

创业者

去哪儿旅行海量指标数据采集与存储

Qunar技术沙龙

【LeetCode】 数组嵌套Java题解

Albert

LeetCode 7月月更

Kubernetes资源编排系列之二: Helm篇

阿里云大数据AI技术

运维

如何判断透明LED显示屏质量优劣

Dylan

LED显示屏 led显示屏厂家

ppdai站点登录参数加密解析,最短的文章,最棒的案例 com

梦想橡皮擦

Python 爬虫 7月月更

语音质量监控

Damon

7月月更

Qt | Qt Creator功能

YOLO.

qt 7月月更

GPS原始坐标转百度地图坐标(纯C代码)

DS小龙哥

7月月更

java零基础入门-File类(概念篇)

喵手

Java 7月月更

Qt|使用Http通讯下载文件

中国好公民st

HTTP qt 7月月更

中原银行代码智能重构实践

中原银行

生产力 插件 代码重构 中原银行 智能重构

EMQ宣布赞助Erlang生态系统基金会(EEF),加速推动Erlang技术在全球的蓬勃发展

EMQ映云科技

erlang 物联网 IoT emqx 7月月更

异想天开 | 假如用中文写代码,是一种什么体验?

雨果

程序员 开发者

谷歌开源Java镜像构建工具Jib_Java_Qingyang Chen_InfoQ精选文章