作为一个Java开发你用过Jib吗
1. 前言
Jib是Google开发的可以直接构建 Java应用的Docker和OCI镜像的类库,以Maven和Gradle插件形式提供。它最骚操作的是可以在没有Docker守护程序的情况下构建,也就是说,您不必在计算机上安装docker守护程序!尽管Spring Boot 2.3.0.RELEASE已经推出了构建镜像的功能,胖哥还是忍不住要试试Jib。
其实最骚的还是名字。
2. Docker构建流程和Jib的构建流程
没有对比就没有伤害。我们还是要对比一下这两者的构建流程。
Docker构建流程需要我们先把项目打成Jar然后编写Dockerfile,然后使用Docker构建功能进行构建镜像、运行容器。流程如下:
而Jib是这样构建的:
作为一个Java开发者,不用再关心各种无关的命令和操作,只需要专注于Java,而且高效稳定以及可复用的增量构建。为什么Jib能这么快而高效?
传统上,将Java应用程序与应用程序Jar一起构建为单个图像层,而Jib的构建策略将Java应用程序分为多层,以进行更细化的增量构建。更改代码时,仅重建更改,而不重建整个应用程序。
3. Jib构建Spring Boot应用
接下来我将演示如何将Spring Boot 应用打成镜像并上传到Dockerhub仓库。
以Maven工程为例,我们只需要在pom.xml
中引入Jib Maven 插件。默认情况下Jib会把我们打好的镜像上传到Google的gcr.io仓库,实际中我们会把打好的镜像上传到私有仓库,所以我们要加一些个性化配置。这里我以dockerhub仓库为例添加一些个性化配置:
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>jib-maven-plugin</artifactId>
<version>2.4.0</version>
<configuration>
<!-- 相当于 Dockerfile 中的 FROM -->
<from>
<image>amazoncorretto:8</image>
</from>
<to>
<!--构建镜像名称,这里我使用maven中定义的项目名称-->
<image>daxus/${project.name}</image>
<!--私有仓库的账号密码-->
<auth>
<username>felordcn</username>
<password>yourpassword</password>
</auth>
<!--Docker 镜像的 tag 这里使用maven定义的版本号-->
<tags>
<tag>
${project.version}
</tag>
</tags>
</to>
</configuration>
</plugin>
然后在项目根目录执行mvn clean compile jib:build
就可以了。
其实也可以简单引入Jib插件:
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>jib-maven-plugin</artifactId>
<version>2.4.0</version>
</plugin>
只不过我们的命令会更复杂一些,需要指定一些必要的参数,例如:
mvn clean compile jib:build \
-Djib.to.image=myregistry/myimage:latest \
-Djib.to.auth.username=$USERNAME \
-Djib.to.auth.password=$PASSWORD
更多的定制命令可参考官方文档:
https://github.com/GoogleContainerTools/jib/tree/master/jib-maven-plugin#extended-usage
4. 总结
Jib使用起来非常简单,让开发人员以Java的风格来完成Docker镜像的构建,能够大大改善编程的体验。多多关注:码农小胖哥 获取更多有用的编程干货教程。
关注公众号:Felordcn 获取更多资讯
作为一个Java开发你用过Jib吗的更多相关文章
- java程序保护如何知识产权,特别提供一个java 开发的java 源代码级的混淆器
java程序保护如何知识产权,特别提供一个java 开发的java 源代码级的混淆器 下载地址:http://yunpan.cn/QXhEcGNYLgwTD 运行方式:java -jar Encryp ...
- 混淆器:java程序保护如何知识产权,特别提供一个java 开发的java 源代码级的混淆器
java程序保护如何知识产权,特别提供一个java 开发的java 源代码级的混淆器 下载地址:http://yunpan.cn/QXhEcGNYLgwTD 运行方式:java -jar Encryp ...
- 搭建一个java开发环境的步骤
首先思考java开发环境需要些什么? 1.适用于我们开发环境的jdk 2.对应开发环境的IDE 3.如果是web应用,还需要web服务器,常用的有Tomcat 1) 下载对应组件 2) 安装 jdk安 ...
- 2,搭建一个java开发环境
(1)java开发需要的条件? 1)适用于环境开发的jdk(里面包括了jre和加热里面包括了jvm) 2)对应开发环境的eclipse 3)如果涉及到web开发,还需要web服务器(Tomcat) ( ...
- 一个Java开发的Python之路----------------(一)
最近开始学习Python了,主要是因为现在在给海航通过JAVA写CMDB运维管理平台,我就是作为唯一一个坐在运维屋里的开发,又当爹,又当妈,前端,后台,测试,设计,需求, 发布,统统一把抓!!在Git ...
- 2017年12月14日 一个Java开发的Python之路----------------(二)
说一个收获最大的,就是这个关闭流对象 之前写java读取文件的时候,最后往往要关闭流对象,以前我一直不明白,为什么,我不使用.close()方法,文件也可以读取成功,总感觉没有什么意义 原来是因为,这 ...
- 开源一个JAVA开发的分类信息源码
最近有空用JAVA折腾的一个分类广告源码. 开发放言:JAVA 框架:SpringMVC Hibernate 分布式用重量级EJB 3.0 实现,可以分布JBOSS部署. 前端用 JSP JQUERY ...
- 菜鸟从零学编程(七)——搭建一个完整的Java开发环境
作为一个Java程序员,配置一个java开发环境是必备的技能,今天给广大菜鸟初学者补上一课.环境的配置,大概就分三个1,JDK 2,Tomcat(或者其他的)3,eclipse(或者myeclipse ...
- 搭建一个完整的Java开发环境
搭建一个完整的Java开发环境 作为一个Java程序员,配置一个java开发环境是必备的技能,今天给广大菜鸟初学者补上一课.环境的配置,大概就分三个1,JDK 2,Tomcat(或者其他的)3,ecl ...
随机推荐
- 【算法基础】KMP字符串
给定一个模式串S,以及一个模板串P,所有字符串中只包含大小写英文字母以及阿拉伯数字. 模板串P在模式串S中多次作为子串出现. 求出模板串P在模式串S中所有出现的位置的起始下标. 输入格式 第一行输入整 ...
- SpringCloud Netflix (六):Config 配置中心
------------恢复内容开始------------ SpringCloud Config 配置中心 Config 配置中心 Spring Cloud Config为分布式系统中的外部化配置提 ...
- 使用Mac的Remote Desktop Manager连接ubuntu16.04 & Win10的远程桌面
疫情严重,公司实行远程办公.自己只有mac电脑,苦于3个系统间跨平台建立远程桌面. 今天,终于尝试成功!特来记录,以防别人踩坑! Mac远程软件安装 Remote Desktop Manager软件非 ...
- Java实现 LeetCode 779 第K个语法符号(递归)
779. 第K个语法符号 在第一行我们写上一个 0.接下来的每一行,将前一行中的0替换为01,1替换为10. 给定行数 N 和序数 K,返回第 N 行中第 K个字符.(K从1开始) 例子: 输入: N ...
- Java 第十一届 蓝桥杯 省模拟赛 凯撒密码加密
凯撒密码加密 题目 问题描述 给定一个单词,请使用凯撒密码将这个单词加密. 凯撒密码是一种替换加密的技术,单词中的所有字母都在字母表上向后偏移3位后被替换成密文.即a变为d,b变为e,-,w变为z,x ...
- Java实现 LeetCode 682 棒球比赛(暴力)
682. 棒球比赛 你现在是棒球比赛记录员. 给定一个字符串列表,每个字符串可以是以下四种类型之一: 1.整数(一轮的得分):直接表示您在本轮中获得的积分数. 2. "+"(一轮的 ...
- Java实现 LeetCode 26 删除排序数组中的重复项
26. 删除排序数组中的重复项 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) ...
- java实现奇怪的比赛
** 奇怪的比赛** 某电视台举办了低碳生活大奖赛.题目的计分规则相当奇怪: 每位选手需要回答10个问题(其编号为1到10),越后面越有难度.答对的,当前分数翻倍:答错了则扣掉与题号相同的分数(选手必 ...
- Spring之JdbcTemplate使用
一:JdbcTemplate概述及入门 “Don‘t Reinvent the Wheel” , 这是一句很经典的话,出自Spring官方,翻译过来就是说 “不要重复发明轮子” .由此我们可以猜测,J ...
- 性能测试中TPS上不去的原因
TPS(Transaction Per Second):每秒事务数,指服务器在单位时间内(秒)可以处理的事务数量,一般以request/second为单位. 压测中为什么TPS上不去的原因: .网络带 ...