Jib构建你的第一个java镜像

jib Official:GoogleContainerTools/jib

本文示例完整demo github地址 https://github.com/moxingwang/practice/tree/master/jib

想要了解并且使用jib,首先你得知道或者使用过docker,在这个基础上才能够明白jib是干什么得,解决了什么问题。

首先我们先看一个例子,如何将一个spring-boot项目简单容器化,如果你从未操作过,可以动手自己实现,或者仔细阅读这篇文章第一个 spring Boot 应用通过Docker 来实现构建、运行、发布。你可能发现如果需要把一个java项目容器化这是一个麻烦和相对复杂的过程,首先你需要编写dockerfile,然后在build dockefile,如过需要push到registries,还需要经过push操作。虽然build和push还是非常简单得。但是写一个dockerfile真的比较麻烦,学习成本也高,看看官网Dockerfile reference就不想学了。那么有没有简单得办法呢,记住几个简单得命令就可以运行了,如同‘mvn spring-boot:run’这么简单得命令,这个时候jib出场了,他就是来完成这个伟大得使命。

如果你还没明白jib是用来做什么事情得,推荐你阅读谷歌开源Java镜像构建工具Jib的前半部分,或者阅读jib Official:GoogleContainerTools/jib

接下来主要介绍具体如何使用(maven的方式)。

将java项目容器化push到registries

jib的引入非常简单,已maven plugin的方式集成到项目中,只需要在你的项目中引入下面代码即可

12345678910111213141516171819202122232425

<plugin> <groupId>com.google.cloud.tools</groupId> <artifactId>jib-maven-plugin</artifactId> <version>0.9.6</version> <configuration> <from> <!--base image--> <image>openjdk:alpine</image> </from> <to> <!--<image>registry.cn-hangzhou.aliyuncs.com/m65536/jibtest</image>--> <!--目标镜像registry地址,为了方便测试,你需要换成自己的地址,如果你的网络不好,可以选用国内加速器,比如阿里云的--> <image>registry.hub.docker.com/moxingwang/jibtest</image> </to> </configuration> <executions> <execution> <phase>package</phase> <goals> <goal>build</goal> </goals> </execution> </executions> </plugin>

这只是一个最简单的配置,比如registry认证配置,jvm配置等等,可以参考github jib详细说明jib/jib-maven-plugin/

构建你的镜像

1

mvn compile jib:build

可能你刚刚运行玩这一步就出现错误,提示Unauthorized,不用担心,这个命令需要把构建出来的image commit并且push到你远程的registry(我这里是registry.hub.docker.com),你可以按照【常见错误1】的方法解决问题。

如果你的网速慢一点可能会在最后步骤’Finalizing…‘,不过没有关系,稍微多等一会就ok,直到’BUILD SUCCESS’出现。最终一个完整的java project被实例化成镜像并且push到了registry里。接下来你可以测试刚刚完成push的镜像。

打开https://hub.docker.com/,你会发现你的image已经构建成功。

  • docker使用镜像 1docker run -it --rm -p8080:8080 registry.hub.docker.com/moxingwang/jibtest

一个spring-boot的image这样就被启动成功了。本文示例demo中集成了swagger-iu, 项目启动成功后我们可以通过http://localhost:8080/sw/swagger-ui.html访问,可以成功在浏览器打开swagger。

把镜像直接构建到本地docker中

使用这种构建方式,首先你要确保本已经安装docker并且环境变量都配置正确,因为这种方式jib依赖docker 命令执行,你还需要保证已经启动服务(在terminal中执行 docker –version 能够正确返回)。

1

mvn compile jib:dockerBuild

接下来直接操作,首先查看本地已有images

1

docker iamges

执行mvn compile jib:dockerBuild

可以看到本地image已经build成功。可以直接启动使用

1

docker run -it --rm -p8080:8080 moxingwang/jibtest

启动成功后同样可以直接访问http://localhost:8080/sw/swagger-ui.htmlswagger页面。

常见错误

常见错误1 Failed to execute goal com.google.cloud.tools:jib-maven-plugin:0.9.6:build (default-cli) on project jib: Build image failed, perhaps you should set a credential helper name with the configuration ‘' or set credentials for 'registry.hub.docker.com' in your Maven settings: Unauthorized for registry.hub.docker.com/moxingwang/jibtest: 401 Unauthorized

当你从私有的registries pull或者push的时候需要认证机制。阅读官方说明按照步骤操作即可。Authentication Methods。 如果帮你本机已经按照docker,那么操作更简单,可以通过docker命令直接登陆registries,然后继续其他jib的操作。

  • registry.hub.docker.com 1docker login --username=你的hub.docker的用户名 registry.hub.docker.com
  • registry.cn-hangzhou.aliyuncs.com 1docker login --username=阿里云docker用户名 registry.cn-hangzhou.aliyuncs.com

推荐阅读

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java架构师进阶

springboot aop 自定义注解方式实现一套完善的日志记录

主要记录的信息有: 操作人,方法名,参数,运行时间,操作类型(增删改查),详细描述,返回值。

23530
来自专栏陈树义

你分得清楚Maven的聚合和继承吗?

用了 Maven 好几年了,许多人还是只懂得简单的依赖坐标。对于 Maven 的聚合和继承还是一知半解,甚至很多人以为是同一个东西。但其实聚合是用于快速构建项目...

15640
来自专栏Java成神之路

maven_01_简介及安装

除了编写源代码,我们每天有相当一部分时间花在了编译、运行单元测试、生成文档、打包和部署等烦琐且不起眼的工作上,这就是构建。

12720
来自专栏黑光技术

Golang官方依赖管理工具dep学习使用笔记

今天在看一个内部项目的时候发现内部一个项目的体积非常大,一看原来是vendor占了很大空间。里面的库都是静态提交到git库的,更新和管理都很不方便,想想java...

17240
来自专栏大数据成神之路

Flink从入门到放弃(入门篇2)-本地环境搭建&构建第一个Flink应用

本地机器上需要有 Java 8 和 maven 环境,推荐在linux或者mac上开发Flink应用:

22630
来自专栏SpringBoot 核心技术

micro-job分布式任务调度框架更新

micro-job是一款分布式任务调度执行框架,内部通过各个组件的Jersey共享出的Rest路径进行数据访问。

17520
来自专栏JAVA技术zhai

深入浅析Spring-boot-starter常用依赖模块

2.针对日常企业应用研发各种场景的Spring-boot-starter自动配置依赖模块,且“开箱即用”(约定spring-boot-starter- 作为命名...

42720
来自专栏编程坑太多

『互联网架构』软件架构-环境搭建maven(三)

http://mvnrepository.com maven 仓库用于查找所需要pom项目

13720
来自专栏大宇笔记

gradle 入坑指南(基本原理介绍+错误集锦)

这次我真的是算是掉坑了,必须写一波来抒发自己对gradle的敬畏之心。 本文主要讲解在Android Studio中gradle配置的坑。

77420
来自专栏工作笔记精华

Maven打包三种方法 转

Maven可以使用mvn package指令对项目进行打包,如果使用Java -jar xxx.jar执行运行jar文件,会出现"no main manifes...

1.3K20

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励