使用 Jib 生成 Java Docker 镜像

Jib 是谷歌最新开源的 Java 应用的 Docker 镜像生成工具,可以通过 Gradle 或 Maven 直接生成镜像并上传到仓库而不需要 Dockerfile 文件或者其他插件;Jib 支持将资源文件和类分层打包,可以大幅度提升生成镜像的速度

有一些其他的插件也可以通过 Docker 实现生成镜像,如com.palantir.docker等,但是都需要额外配置 Dockerfile, 如果应用仅需要通过 Dockerfile 构建镜像,建议使用 Jib 来提升构建和上传速度

使用

添加依赖

  • Gradle

buildscript {repositories {maven { url 'https://plugins.gradle.org/m2/' }}dependencies {classpath "gradle.plugin.com.google.cloud.tools:jib-gradle-plugin:0.9.6"}
}apply plugin: "com.google.cloud.tools.jib"

plugins {id 'com.google.cloud.tools.jib' version '0.9.6'
}

构建镜像

以下方式都需要终端能够访问 gcr.iohub.docker.com等 Docker Hub 才能成功

  • 直接构建并推送到 GCR
    通过这种方式构建的镜像会以gcr.io/distroless/java为底层镜像,编译之后生成镜像,并推送到 Google 容器镜像仓库中:
gradle jib 
  • 指定推送的容器镜像仓库

Google Container Center, Amazon Elastic Container Registry, Docker Hub Registry之外的 Hub可能会失败,需要先登录到对应的 Docker Hub才可以

gradle jib --image registry.hub.docker.com/helloworld/java:jib

或者在build.gradle中以下添加之后执行 gradle jib

jib.to.image = 'registry.hub.docker.com/helloworld/java:jib'
  • 保存在本地
    需要本地 Docker 应用已经启动
gradle jibDockerBuild
  • 自定义基础镜像和参数(build.gradle)
jib {from {image = 'registry.hub.docker.com/openjdk:8-jdk-alpine'auth {username = 'username'password = 'password'}}to {image = 'registry.hub.docker.com/helloword/java:jib'auth {username = 'username'password = 'password'}credHelper = 'osxkeychain'}container {jvmFlags = ['-Djava.security.egd=file:/dev/./urandom', '-Duser.timezone=GMT+08']mainClass = 'example.jib.MainClass'args = ['test]ports = ['8080']}
}
  • from:拉取的镜像的配置,默认为gcr.io/distroless/java
  • to:要生成的镜像的配置
  • image:拉取或生成的镜像名称
  • auth: 认证信息,分别为用户名和密码
  • credHelper:鉴权信息的存放方式,Google 使用 gcr, AWS使用 ecr-login, DockerHub 根据平台使用 osxkeychain, wincred,secretservice,pass中的一种,可以参考 docker-credential-helpers
  • container: 容器的属性
  • jvmFlgs: JVM 容器的参数,和 Dockerfile 的 ENTRYPOINT作用相同
  • mainClass: 启动类限定名
  • args: main 方法的传入参数
  • ports: 容器暴露的端口,和 Dockerfile 的EXPOSE作用相同

推荐from 改为 registry.hub.docker.com/openjdk:8-jdk-alpine, to改为 registry.cn-qingdao.aliyuncs.com 等国内的仓库,同时将 Docker 的镜像源改为https://registry.docker-cn.com 或 https://docker.mirrors.ustc.edu.cn以减少构建时间


问题

  • 登录失败,未授权(401 Unauthorized)

出现这种问题一般是因为没有登录对应的Docker Registry 导致的,需要配置用户登录到相应的容器服务,或者在fromto 节点手动添加账户配置:

        auth {username = 'username'password = 'password'}
  • 连接超时( Connect to gcr.io/108.177.125.82:443 timed out)

这个问题很容易出现,主要是因为在国内无法访问gcr.io导致的,推荐使用 SS 的全局模式或者 Outline 或其他可以访问到 gcr.io 的工具;一定要确保 Terminal 或者服务器可以访问到 gcr.io 才能在不指定仓库时构建成功;或者指定国内的仓库,不需要访问谷歌的仓库

使用 Jib 生成 Java Docker 镜像相关推荐

  1. java实现镜像系统_谷歌开源Java镜像构建工具Jib

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

  2. Java Spring Boot 2.0 实战之制作Docker镜像并推送到Docker Hub和阿里云仓库

    内容摘要:大规模集群快速部署Java应用,需要制作Docker镜像,本次课程详细介绍如何制作Java程序的Docker镜像文件,深入解析DockerFile核心参数,以及实践演练把我们制作的Docke ...

  3. Maven Docker镜像使用技巧

    摘要: Maven是目前最流行的Java项目管理工具之一,提供了强大的包依赖管理和应用构建功能.本文以Maven为例介绍了Docker在应用构建中的一些常见技巧. Maven是目前最流行的Java项目 ...

  4. Dockerfile 文件结构、docker镜像构建过程详细介绍

    [Docker那些事]系列文章 Dockerfile 文件结构.docker镜像构建过程详细介绍 Dockerfile文件中CMD指令与ENTRYPOINT指令的区别 构建Docker镜像指南,含实战 ...

  5. 构建Docker镜像指南,含实战案例

    [Docker那些事]系列文章 Dockerfile 文件结构.docker镜像构建过程详细介绍 Dockerfile文件中CMD指令与ENTRYPOINT指令的区别 构建Docker镜像指南,含实战 ...

  6. docker配置python环境_PyCharm使用Docker镜像搭建Python开发环境

    在我们平时使用PyCharm的过程中,一般都是连接本地的Python环境进行开发,但是如果是离线的环境呢?这样就不好搭建Python开发环境,因为第三方模块的依赖复杂,不好通过离线安装包的方式安装.本 ...

  7. Docker详解(九)——Docker镜像发布

    今天继续给大家介绍Linux运维相关知识,本文主要内容是Docker镜像发布. 一.Docker镜像发布简介 在上文Docker详解(八)--Docker镜像制作中,我们介绍了Docker镜像的制作, ...

  8. 怎么把一个Java应用打包成Docker镜像

    怎么把Java应用打包成Docker镜像?对熟悉Docker的同学这应该是一个很简单的问题,把项目打包成JAR包然后在Dockerfile里用ADD命令把JAR文件放到镜像里,启动命令设置执行这个JA ...

  9. Docker Java程序镜像制作

    Docker Java程序镜像制作 制作前的准备 jre:不需要完整的jdk,jre即可,到Oracle进行下载即可,下载链接,根据自己的情况进行选择,这里选择jre-8u221-linux-x64. ...

  10. docker java 最小镜像_Docker多步构建更小的Java镜像

    [编者的话]最新版Docker将支持多步构建(Multi-stage build),这样使用单个Dockerfile就可以定义多个中间镜像用于构建,测试以及发布等多个步骤,并且有效减小最终镜像的大小. ...

最新文章

  1. 获取服务端https证书
  2. 一个大浪Java罢工(一个)安装JDK和环境变量配置
  3. oracle千万级分页优化,oracle千万级数据分页存储过程优化
  4. zpl代码可以编译的特殊字符_国际C语言混乱代码大赛(IOCCC)代码解析
  5. NVIDIA AGX Xavier环境配置
  6. Asp.net Core 使用MyCat分布式数据库,实现读写分离
  7. Redis数据安全与性能保障——redis读书笔记4
  8. nginx 在阿里云怎么安装mysql_在阿里云 CentOS 服务器(ECS)上搭建 nginx + mysql + php-fpm 环境...
  9. day11函数的进阶动态参数,命名空间,作用域,第一类对象
  10. Tensorflow中与张量形状有关的操作
  11. flex连接mysql_java与flex结合做的登陆(连接数据库)
  12. 软考网规论文-论企业内部网的安全策略
  13. 【React Native 安卓开发】----(View实战之仿携程)【第三篇】
  14. 5种主流的移动端广告类型
  15. 数据库+PullToRefreshListView
  16. At least one JAR was scanned for TLDs yet contained no TLDs.
  17. 洛谷 P1538 迎春舞会之数字舞蹈
  18. 如何升级Windows 11正式版?四种方案都在这里了
  19. 小程序转码机器人-微信小程序转二维码
  20. 服务社-企语系统-F_air21.8的Debian11安装方法,也叫协同管理系统

热门文章

  1. 新年贺卡用python_新年贺卡图片手工制作精美简单
  2. web网站中常见攻击手法与原理
  3. 直播源码开发,css预加载旋转动画 与 流光字体
  4. [Android O] [RK3399] -- Vendor Storage 功能探究
  5. 2019牛客暑期多校训练营(第六场) Move
  6. 【Linux内核分析与应用-陈莉君老师】课程相关索引
  7. c0704 学生记录
  8. maya表情blendshape_带BlendShape表情的动作文件播放异常
  9. 正则表达式-验证座机号码
  10. org.apache.jasper.JasperException: java.lang.NullPointerException 解决办法