TAPD 思享汇来啦!行业专家现身说“法”,教你玩转研发管理! 了解详情
写点什么

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

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

关注

评论

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

弹窗如何设计才能提高用户体验

源字节1号

网站开发

大数据培训hive和mapreduce的区别

@零度

mapreduce hive 大数据开发

TDesign Vue Next For Mobile 发布

TDesign

搭建 VuePress 站点必做的 10 个优化

冴羽

JavaScript Vue 前端 vuepress 博客搭建

架构实战营-模块一作业

凯博无线

web技术分享| 快速实现一个呼叫邀请 SDK

anyRTC开发者

前端 Web 语音通话 视频通话 呼叫邀请

web前端培训比较常见的排序算法有哪些

@零度

算法 前端开发

java编程开发多线程锁的8个问题分析

编程江湖

您有多点会员吗?——数据库渐进式创新助力多点推进经营大脑实践

PingCAP

8家正规云南等保测评机构名单看这里!

行云管家

等保 等保测评 等保2.0 云南

天翼云RDS数据库如何修改数据库参数

天翼云开发者社区

数据库 RDS

物理裸机配置如何转换为天翼云云主机配置

天翼云开发者社区

云主机

如何写出好的产品帮助文档?

小炮

产品文档

深度解密|基于 eBPF 的 Kubernetes 问题排查全景图发布

阿里巴巴云原生

OpenHarmony 3.1 Beta版本关键特性解析——HiStreamer轻量级可定制的媒体管线框架大揭秘

OpenHarmony开发者

OpenHarmony HiStreamer 媒体管线框架

Spark启动及提交流程内部核心原理剖析

编程江湖

易观分析:开源是隐私计算技术应用和生态构建的关键

易观分析

隐私计算 开源社区 开源技术

CSDN 数据库Meetup|OceanBase 技术专家讲述 SQL 的一生

OceanBase 数据库

oceanbase OceanBase 开源 OceanBase 社区版 OceanBase社区

grpc双向流究竟是什么情况?2段代码告诉你

华为云开发者联盟

gRPC RPC 消息 grpc双向流 消息序列

Web 键盘输入法应用开发指南(10)—— 性能与原理

天择

JavaScript 浏览器 键盘 输入法 3月月更

中国科协发布 2021 开源创新榜,阿里巴巴 2 大开源社区、5 大开源项目上榜

阿里巴巴云原生

安全大讲堂 | 陈屹力:未来云原生安全能力建设将强调体系化的安全防护

腾讯安全云鼎实验室

云原生 安全大讲堂 云原生安全

如何选择天翼云云硬盘

天翼云开发者社区

云硬盘

Node.js-COMMONJS 规范

编程江湖

2022年网络运维必备软件和工具推荐

行云管家

运维 网络运维 IT运维 云管理

天翼云云硬盘的磁盘模式及共享盘

天翼云开发者社区

云存储 云硬盘

预约下载 | 《Serverless 开发速查手册》全新上线

阿里巴巴云原生

艾瑞:技术驱动、生态助力,移动应用行业展望“黄金十年”

Geek_2d6073

华为云发布实时音视频行业加速器,为企业解决技术与商业双重难题

华为云开发者联盟

音视频 RTC 华为云 华为云实时音视频 DevRun

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