QCon北京「鸿蒙专场」火热来袭!即刻报名,与创新同行~ 了解详情
写点什么

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

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

关注

评论

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

关于架构的几件小事:System context

北风

系统架构 系统性思考 架构师 系统上下文 极客大学架构师训练营

为提升网点业务员效率,我们做的事情。

黄大路

商业

Redis6.0 多线程源码分析

代码诗人

redis 源码 技术 线程模型

天天都是520

Neco.W

爱情 表白日

SpringBoot瘦身

JFound

Spring Boot sprnig

企业数字化转型:用 SpreadJS 打造互通互链的电力系统物联网

葡萄城技术团队

数字化转型 SpreadJS 电力

SQLite是什么

山楂大卷

sqlite 数据库 RDBMS 存储

ARTS_20200520

凌轩

Java ARTS 打卡计划

竟然有人想看我的「日记」,满足一下大家

非著名程序员

学习 程序人生 提升认知

推动敏捷,就是推动软件业变革

盛安德软件

敏捷 推动软件业变革

万字长文带你看懂Mybatis缓存机制

程序员小岑

Java 源码 技术 mybatis

Django的ListView超详细用法(含分页paginate功能)

BigYoung

Python django ListView 分页

深入剖析ThreadLocal原理

JFound

Java

回“疫”录(22):我以为结束了,其实才开始

小天同学

疫情 回忆录 现实纪录 纪实

JVM源码分析之Java对象头实现

猿灯塔

如何做好 To B 的 SAAS 服务

路边水果摊

SASS 企业 服务

Redis 命令执行过程(下)

程序员历小冰

redis 源码分析

Elastic Stack 系列专辑

Yezhiwei

elasticsearch Logstash Kibana ELK Elastic Stack

JavaScript 基础拾遗(一)

hq

Java 学习 文章收集

程序员需要了解的硬核知识大全

苹果看辽宁体育

Java c 计算机基础

Android | Tangram动态页面之路(五)Tangram原理

哈利迪

android

Enhanced Github:一个 GitHub 专用的好插件

非著名程序员

GitHub 程序员 效率工具

kotlin 200行代码开发一个简化版Guice

陈吉米

Java kotlin guice ioc mynlp

敏捷为什么会失败之「PA-SA-WAKA-DA」理论

易成研发中心

Scrum 敏捷开发 Agile

当我们持续感觉很糟糕要怎么办

董一凡

写作 生活质量 情感

JVM源码分析之synchronized实现

猿灯塔

2020年全球经济萎缩,火花国际PLUS逆袭而来闪耀数字经济

极客编

nginx 概念及上手

HelloZyjS

我的编程之路-4(进阶)

顿晓

进阶 看书 编程之路

职场“潜”规则

L3C老司机

个人成长 职场 新人 人才培养 能力模型

识别代码中的坏味道(四)

Page

敏捷开发 面向对象 重构 CleanCode 代码坏味道

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