简介

Jib 是 Google 开发的可以直接构建 Java 应用的 Docker 和 OCI 镜像的类库,以 Maven 和 Gradle 插件形式提供。

通过 Jib,Java 开发者可以使用他们熟悉的 Java 工具来构建容器。Jib 是一个快速而简单的容器镜像构建工具,它负责处理将应用程序打包到容器镜像中所需的所有步骤。它不需要你编写 Dockerfile 或安装 Docker,而且可以直接集成到 Maven 和 Gradle中 —— 只需要将插件添加到构建中,就可以立即将 Java 应用程序容器化。

Docker 构建流程:

Jib 构建流程:

配置

maven

编辑pom.xml文件,添加以下内容:

    <build><plugins>...<plugin><groupId>com.google.cloud.tools</groupId><artifactId>jib-maven-plugin</artifactId><version>0.9.4</version><configuration><to><image>myimage</image><credHelper>osxkeychain</credHelper></to></configuration></plugin>...</plugins></build>

配置说明:

  • from:打包docker的基础镜像,默认镜像是:gcr.io/distroless/java ,需要翻墙
  • to:默认push到dockerhub指定仓库
  • credHelper:docker认证,这个就有点复杂了,下面再详细说明

credHelper

这个是使用了第三方的一个docker认证工具,源码仓库:https://github.com/docker/docker-credential-helpers

这里我提供一个linux的二进制压缩包: https://download.csdn.net/download/lusyoe/10534491

下面是配置操作步骤:

1. 解压

下载好后,将其复制到/usr/bin路径下,然后通过以下命令进行解压: tar -xf docker-credential-pass-v0.6.0-amd64.tar.gz

验证是否可用: docker-credential-pass version 如果打印出0.6.0就表示正常

2. 安装gpg、pass

执行以下命令: CentOS: sudo yum install gpg pass -y Ubuntu: sudo apt-get install gpg pass -y

3. 创建签名

通过gpg2命令生成签名: gpg2 --gen-key 根据提示,一路确认下来就可以了。中间会提示输入密码,这个要记住了,后面会用到。

最后生成随机数的时候可能会慢一点,随便在键盘上敲点字符就可以了。 最终生成的内容如下:

gpg: /root/.gnupg/trustdb.gpg: trustdb created
gpg: key xxxxx marked as ultimately trusted
public and secret key created and signed.gpg: checking the trustdb
gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
gpg: depth: 0  valid:   1  signed:   0  trust: 0-, 0q, 0n, 0m, 0f, 1u
pub   2048R/6CC91C4E 2018-07-11Key fingerprint = 8E3C 1083 6041 33A8 99CA  DC55 1E68 4783 6CC9 1C4E
uid                  lusyoe <xxxxx@xxx.com>
sub   2048R/595B7456 2018-07-11

4. 配置pass

  • 初始化 
    生成完签名后,通过pass工具进行初始化一下,执行以下命令: 
    pass init <gpg-key> 
    gpg-key就是上一步生成内容的第二行key后面的xxxxx内容。

  • 插入密钥检查 
    pass insert docker-credential-helpers/docker-pass-initialized-check 
    这里会提示输入密码,最好保持跟之前的gpg一致即可,后面还会提示输入gpg的密码

  • 验证pass是否已初始化 
    pass show docker-credential-helpers/docker-pass-initialized-check

5. 配置docker

编辑~/.docker/config.json文件,添加以下内容:

{"credsStore": "osxkeychain"
}

配置完后,就可以使用:docker login开始登陆了。

构建

先编译,然后再打包镜像,当然也可以绑定maven构建周期,自动打包镜像。 
mvn compile 
mvn jib:build

githhub:https://github.com/GoogleContainerTools/jib

优点

  • 无需编写Dockerfile,甚至无需安装docker
  • 无需再执行docker build、push命令了
  • 增量构建镜像,无需每次编译项目先打包jar

缺点

  • 默认拉取的基础镜像是gcr仓库的,需要翻墙,并且jdk默认是openjdk
  • 在拉取自定义的基础镜像和push构建的镜像这块,设计的不够友好,依赖需要第三方的加密组件(折腾了好一会);
  • 侵入性太强,需要每个项目都添加上maven插件。如果是现有方案,只需要添加一个Dockerfile就可以了,而且定制化高
  • 只支持java平台

google jib容器打包工具相关推荐

  1. Docker学习总结(36)——利用Google开源Java容器化工具Jib构建镜像

    一.前言 容器的出现让Java开发人员比以往任何时候都更接近"编写一次,到处运行"的工作流程,但要对Java应用程序进行容器化并非易事:你必须编写Dockerfile,以root身 ...

  2. Docker集群管理(DockerHub Harbor 打包-Jib 任务编排工具- docker-compose和Swarm)

    Docker 集群管理 Docker 集群管理 镜像仓库管理 DockerHUb仓库管理 什么是DockerHUb 账号注册和登陆 Docker客户端登录 管理镜像 推送镜像 仓库镜像测试 regis ...

  3. 云计算:OpenStack、Docker、K8S(Kubernetes容器编排工具)的演进史 | 附推荐阅读

    目录 引子 OpenStack 的诞生 OpenStack 是什么 Docker 的出现 K8S(Kubernetes) - 为 Docker 而生 推荐阅读 引子 作为一名程序员,设计程序架构.优化 ...

  4. k8s的应用打包工具Helm

    每个成功的软件平台都有一个优秀的打包系统,比如 Debian.Ubuntu 的 apt,Redhat.Centos 的 yum.而 Helm 则是 Kubernetes 上的包管理器. 本章我们将讨论 ...

  5. aapt2资源打包工具

    AAPT2 AAPT2(Android资源打包工具)是一种构建工具,Android Studio 和 Android Gradle 插件使用它来编译和打包应用的资源.AAPT2 会解析资源.为资源编制 ...

  6. Containerd【轻量级容器管理工具】

    文章目录 Containerd[轻量级容器管理工具] 一.Containerd介绍 1.Containerd的由来 2.Containerd概念 3.Containerd架构 4.几个概念区分 二.C ...

  7. 把docker当做绿色打包工具

    如题,我只是把docker当成绿色版的各种环境的集成打包工具了 用到了docker的--net=host模式,这个暂时在mac下是有问题的,linux下正常使用,具体docker的网络模式参考这里,此 ...

  8. 写你自己 android 多通道打包工具 可以包libs和.so文件

    android上传应用程序,需要区分各个信道. 通常更改配置文件中的一个通道id,假设有多个通道,手动更改并生成apk这将是非常麻烦的,及增加误差的概率. 在这个课堂上分享一个打包工具.也可在网上类似 ...

  9. APK文件简介 及 解包 打包 工具 介绍

    1. APK文件简介 APK是Android Package的缩写,即Android application package文件或Android安装包.每个要安装到Android平台的应用都要被编译打 ...

  10. NOMAD 与 KUBERNETES:比较容器编排工具——翻译版

    原文地址:https://www.imaginarycloud.com/blog/nomad-vs-kubernetes/?fbclid=IwAR1VgUJ4ikO30sDaZv7c9WYaVSPPo ...

最新文章

  1. MindSpore技术理解(上)
  2. 用Python分析深圳程序员工资有多高?
  3. .如何实现浏览器内多个标签页之间的通信?
  4. centos7搭建nexus
  5. SpringBoot学习笔记:Spring Data Jpa的使用
  6. OkHttp协议介绍以及文件下载和上传+OkHttp协议封装+OkHttp拦截器____SpringBoot——集成Okhttp3
  7. shell编程之进阶篇三常见命令详解
  8. CA机构是如何保护自己私钥的?
  9. 深入理解Java虚拟机(1)——JDK源码分析
  10. wap2app是什么
  11. 带图傻瓜式自己动手修改新浪微博各种尾巴
  12. day29 | 黑马程序员Java全程笔记 | 第二阶段MySQL高级事务-索引-视图-触发器-存储过程
  13. SDUT 3386 小雷的冰茶几
  14. 100个python算法超详细讲解:搬山游戏
  15. TIMESAT 无格式文件迭代转tif
  16. Omnipeek空口抓包(3):过滤器的设置和使用
  17. (素材源代码)猫猫学IOS(四)UI之半小时搞定Tom猫
  18. 读《桥—巴拉克•奥巴马的人生及其崛起》有感
  19. TUM RGB-D数据集解释简介
  20. SD-WAN最让人心动的四个功能

热门文章

  1. python if any_python条件判断 all(),any()
  2. 如何在vscode中暴躁的使用leetcode
  3. 赛尔号星球大战游戏攻略
  4. 老年程序员的出路何在
  5. 厉害了!互联网公司各岗位真实工作内容大起底!
  6. 百度AI开放平台,共建AI生态
  7. 四代增强方式和Enhancement查找方法
  8. 凸优化基础(Convex Optimization basics)
  9. 一元线性回归模型系数、方差估计、检验回归效果显著性,b的置信区间,Y约为X的指数函数时,求Y关于x的回归方程
  10. 关于线性回归分析的理解