写点什么

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

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

关注

评论

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

「技术人生」第6篇:技术同学应该如何理解业务?

阿里巴巴中间件

阿里云 云原生 技术人生

自建开源Cassandra与GaussDB(for Cassandra)性能对比测试报告

华为云数据库小助手

性能分析 GaussDB 华为云数据库 GaussDB(for Cassandra) 开源Cassandra

残疾人大学生就业难?「低代码」应用,让就业更简单!

优秀

低代码

云信小课堂 | 聊天室内容审核很头疼?3步解决!

网易云信

人工智能 AI 视频

T-BOX专业分享

SOA开发者

被 Docker 日志坑惨了

AlwaysBeta

Docker 容器 运维

如何高效掌控K8s资源变化?K8s Informer实现机制浅析

腾源会

云原生 k8s

丧心病狂!阿里内部Spring Cloud高薪笔记流失,GitHub夜获星百万

Java 程序员 面试 计算机 阿里巴巴‘

直播报名 | 超低延时直播架构解析

百度开发者中心

最佳实践 方法论 活动 直播

Micro Focus 发布年度安全运营报告,洞察后疫情时代企业安全运营新趋势

F5 Networks收购云安全初创公司Threat Stack

BeeWorks

DPDK分析学习之全网唯一的DPDK教学课程丨虚拟化高性能专家之路

Linux服务器开发

网络协议 虚拟化 Linux服务器开发 DPDK 高性能网络

Go 语言网络库 getty 的那些事

阿里巴巴中间件

开源 云原生 Go 语言

Serverless Devs 2.0 开箱测评:Serverless 开发最佳实践

阿里巴巴中间件

阿里云 Serverless 云原生 中间件

12 堂干货直播课,8 位 Serverless 大咖带你零基础晋级 Serverless 高手

阿里巴巴中间件

阿里云 Serverless 云原生 中间件

Vite + Vue3 + OpenLayers 同步两个地图基础操作

德育处主任

大前端 Web 地图 vite openlayers

大众汽车迟到的软件优先思维

SOA开发者

Dubbo 和 HSF 在阿里巴巴的实践:携手走向下一代云原生微服务

阿里巴巴中间件

阿里云 云原生 中间件

与顶级互联网公司技术大佬面对面聊聊RocketMQ吧!

阿里巴巴中间件

阿里云 开源 RocketMQ 云原生 中间件

一朵云、一张网、一体化 ——GRTN 打造最佳流媒体场景实践

阿里云CloudImagine

云计算 阿里云 边缘计算 视频云 流媒体传输

首个RISC-V计算机芯片现身欧洲处理器计划

BeeWorks

这本Alibaba“绝密”SpringBoot精髓到底厉害在哪里

Java 程序员 面试 springboot 计算机

Nebula Graph 源码解读系列 | Vol.01 Nebula Graph Overview

NebulaGraph

2021下半年全新京东商城亿级并发架构设计,不学习你就OUT了!!

Java 程序员 面试 计算机 京东

漫画 | 一口气搞懂 Serverless !

阿里巴巴中间件

阿里云 云原生 中间件

如何加速云原生数据应用?这个开源项目备受关注

阿里巴巴中间件

阿里云 开源 云原生 中间件

redis--数据库实现

en

金九银十,Java程序员面试历程(附字节,阿里,百度,网易,美团等面经)

Java 程序员 架构 面试 后端

秀出新天际的 SpringBoot 笔记,让开发像搭积木一样简单

Java 架构 面试 Spring Boot

Webrtc ICE 框架

webrtc developer

WebRTC p2p ICE

从技术到商业:2021 DEMO CHINA创新中国峰会正式开启

创业邦

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