Jib构建你的第一个java镜像
本文示例完整demo github地址 github.com/moxingwang/…
想要了解并且使用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的方式集成到项目中,只需要在你的项目中引入下面代码即可
<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/。
构建你的镜像
mvn compile jib:build
复制代码
可能你刚刚运行玩这一步就出现错误,提示Unauthorized,不用担心,这个命令需要把构建出来的image commit并且push到你远程的registry(我这里是registry.hub.docker.com),你可以按照【常见错误1】的方法解决问题。
如果你的网速慢一点可能会在最后步骤'Finalizing...',不过没有关系,稍微多等一会就ok,直到'BUILD SUCCESS'出现。最终一个完整的java project被实例化成镜像并且push到了registry里。接下来你可以测试刚刚完成push的镜像。
打开hub.docker.com/,你会发现你的image已经构建成功。
- docker使用镜像
docker 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 能够正确返回)。
mvn compile jib:dockerBuild
复制代码
接下来直接操作,首先查看本地已有images
docker iamges
复制代码

执行mvn compile jib:dockerBuild
可以看到本地image已经build成功。可以直接启动使用
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
docker login --username=你的hub.docker的用户名 registry.hub.docker.com
复制代码
- registry.cn-hangzhou.aliyuncs.com
docker login --username=阿里云docker用户名 registry.cn-hangzhou.aliyuncs.com
复制代码
推荐阅读
原文地址:https://juejin.im/post/5b4e9c316fb9a04fa01d39d6
Jib构建你的第一个java镜像的更多相关文章
- 作为一个Java开发你用过Jib吗
1. 前言 Jib是Google开发的可以直接构建 Java应用的Docker和OCI镜像的类库,以Maven和Gradle插件形式提供.它最骚操作的是可以在没有Docker守护程序的情况下构建,也就 ...
- 利用Google开源Java容器化工具Jib构建镜像
转载:https://blog.csdn.net/u012562943/article/details/80995373 一.前言 容器的出现让Java开发人员比以往任何时候都更接近“编写一次,到处运 ...
- 构建一个java环境的centos系统镜像并上传到阿里云镜像仓库
编辑dockerfile 文件 FROM centos MAINTAINER zhaoweifeng ENV LANG en_US.UTF-8 RUN /bin/cp /usr/share/zonei ...
- Jib构建镜像的问题分析(Could not find or load main class ${start-class})
问题简述 通过Jib插件将SpringBoot工程制作成Docker镜像成功,但是运行镜像的时候报错(Could not find or load main class ${start-class}) ...
- Docker多步构建更小的Java镜像
译者按: 最新版Docker将支持多步构建(Multi-stage build),这样使用单个Dockerfile就可以定义多个中间镜像用于构建,测试以及发布等多个步骤,并且有效减小最终镜像的大小. ...
- Gradle入门(3):构建第一个Java项目
Gradle插件通过引入特定领域的约定和任务来构建你的项目.Java插件是Gradle自身装载的一个插件.Java插件提供的基本功能远比源代码编译和打包多.它为你的项目建立了一个标准的项目布局,并确保 ...
- Spring Framework5.0 学习(1)—— 用Gradle构建一个Java Project
1.0 安装Gradle,参考之前文章<Gradle入门实战(Windows版)> 2.0 使用gradle 快速生成一个Java project gradle init --type ...
- 最小化 Java 镜像的常用技巧
背景 随着容器技术的普及,越来越多的应用被容器化.人们使用容器的频率越来越高,但常常忽略一个基本但又非常重要的问题 - 容器镜像的体积.本文将介绍精简容器镜像的必要性并以基于 spring boot ...
- Docker学习笔记之一,搭建一个JAVA Tomcat运行环境
Docker学习笔记之一,搭建一个JAVA Tomcat运行环境 前言 Docker旨在提供一种应用程序的自动化部署解决方案,在 Linux 系统上迅速创建一个容器(轻量级虚拟机)并部署和运行应用程序 ...
随机推荐
- WebAppBuilder独立于portal之arcgis for js应用框架研究之二
WAB采用ArcGIS JavaScript for API作为地图开发底层,采用Web AppBuilder作为开发框架,利用该框架即拿即用的Widget来构建应用,比如制图.查询.地理处理.编辑. ...
- C++ 学习笔记 (八)重载 重写 重定义以及名字覆盖
学习C++必定会遇到重载.重写.重定义.概念的东西多也是学习C++蛋疼之处,但是还是得弄懂,学懂了也就不觉得多了. 概念,特点: 重载: 直白点说就是函数名字相同,传参的个数,类型不一样.判断标准在于 ...
- 洛谷P3374树状数组1
下有彩蛋(from https://www.cnblogs.com/wuwangchuxin0924/p/5921130.html)树状数组的blog写的最好的是这位//https://www.cnb ...
- Spring Cloud 入门 Eureka-Server服务注册
这里就不介绍怎么创建springboot项目了,可以查看我前面的博客 Spring Cloud Eureka Spring Cloud Eureka是Spring Cloud Netflix项目下的服 ...
- Tomcat:javax.management.InstanceNotFoundException: com.alibaba.druid:type=DruidDataSourceStat异常
问题: 在关闭tomcat时: Tomat报出一下异常:ERROR [com.alibaba.druid.stat.DruidDataSourceStatManager] – unregister m ...
- JS - Array.slice 与 Array.splice
1)Array.slice方法 1.1)接收两个参数: a:起始下标 b:结束下标 1.2)返回由a(包括)至b(不包括)的元素所组成的数组 ...
- ZendFramework-2.4 源代码 - 关于MVC - View层 - 控制器返回值
<?php class ReturnController extends AbstractActionController { public function returnAction() { ...
- 算法图解之大O表示法
什么是大O表示法 大O表示法可以告诉我们算法的快慢. 大O比较的是操作数,它指出了算法运行时间的增速. O(n) 括号里的是操作数. 举例 画一个16个格子的网格,下面分别列举几种不同的画法,并用大O ...
- 笔记-数据库-redis
笔记-数据库-redis 1. redis简介 Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库.缓存和消息中间件. 它支持多种类型的数据结构,如 stri ...
- 用 Tensorflow 建立 CNN
稍稍乱入的CNN,本文依然是学习周莫烦视频的笔记. 还有 google 在 udacity 上的 CNN 教程. CNN(Convolutional Neural Networks) 卷积神经网络简单 ...