使用 Jib 生成 Java Docker 镜像
使用 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.io
或hub.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-helperscontainer
: 容器的属性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 导致的,需要配置用户登录到相应的容器服务,或者在from
和to
节点手动添加账户配置:
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 镜像相关推荐
- java实现镜像系统_谷歌开源Java镜像构建工具Jib
容器的出现让Java开发人员比以往任何时候都更接近"编写一次,到处运行"的工作流程,但要对Java应用程序进行容器化并非易事:你必须编写Dockerfile,以root身份运行Do ...
- Java Spring Boot 2.0 实战之制作Docker镜像并推送到Docker Hub和阿里云仓库
内容摘要:大规模集群快速部署Java应用,需要制作Docker镜像,本次课程详细介绍如何制作Java程序的Docker镜像文件,深入解析DockerFile核心参数,以及实践演练把我们制作的Docke ...
- Maven Docker镜像使用技巧
摘要: Maven是目前最流行的Java项目管理工具之一,提供了强大的包依赖管理和应用构建功能.本文以Maven为例介绍了Docker在应用构建中的一些常见技巧. Maven是目前最流行的Java项目 ...
- Dockerfile 文件结构、docker镜像构建过程详细介绍
[Docker那些事]系列文章 Dockerfile 文件结构.docker镜像构建过程详细介绍 Dockerfile文件中CMD指令与ENTRYPOINT指令的区别 构建Docker镜像指南,含实战 ...
- 构建Docker镜像指南,含实战案例
[Docker那些事]系列文章 Dockerfile 文件结构.docker镜像构建过程详细介绍 Dockerfile文件中CMD指令与ENTRYPOINT指令的区别 构建Docker镜像指南,含实战 ...
- docker配置python环境_PyCharm使用Docker镜像搭建Python开发环境
在我们平时使用PyCharm的过程中,一般都是连接本地的Python环境进行开发,但是如果是离线的环境呢?这样就不好搭建Python开发环境,因为第三方模块的依赖复杂,不好通过离线安装包的方式安装.本 ...
- Docker详解(九)——Docker镜像发布
今天继续给大家介绍Linux运维相关知识,本文主要内容是Docker镜像发布. 一.Docker镜像发布简介 在上文Docker详解(八)--Docker镜像制作中,我们介绍了Docker镜像的制作, ...
- 怎么把一个Java应用打包成Docker镜像
怎么把Java应用打包成Docker镜像?对熟悉Docker的同学这应该是一个很简单的问题,把项目打包成JAR包然后在Dockerfile里用ADD命令把JAR文件放到镜像里,启动命令设置执行这个JA ...
- Docker Java程序镜像制作
Docker Java程序镜像制作 制作前的准备 jre:不需要完整的jdk,jre即可,到Oracle进行下载即可,下载链接,根据自己的情况进行选择,这里选择jre-8u221-linux-x64. ...
- docker java 最小镜像_Docker多步构建更小的Java镜像
[编者的话]最新版Docker将支持多步构建(Multi-stage build),这样使用单个Dockerfile就可以定义多个中间镜像用于构建,测试以及发布等多个步骤,并且有效减小最终镜像的大小. ...
最新文章
- 获取服务端https证书
- 一个大浪Java罢工(一个)安装JDK和环境变量配置
- oracle千万级分页优化,oracle千万级数据分页存储过程优化
- zpl代码可以编译的特殊字符_国际C语言混乱代码大赛(IOCCC)代码解析
- NVIDIA AGX Xavier环境配置
- Asp.net Core 使用MyCat分布式数据库,实现读写分离
- Redis数据安全与性能保障——redis读书笔记4
- nginx 在阿里云怎么安装mysql_在阿里云 CentOS 服务器(ECS)上搭建 nginx + mysql + php-fpm 环境...
- day11函数的进阶动态参数,命名空间,作用域,第一类对象
- Tensorflow中与张量形状有关的操作
- flex连接mysql_java与flex结合做的登陆(连接数据库)
- 软考网规论文-论企业内部网的安全策略
- 【React Native 安卓开发】----(View实战之仿携程)【第三篇】
- 5种主流的移动端广告类型
- 数据库+PullToRefreshListView
- At least one JAR was scanned for TLDs yet contained no TLDs.
- 洛谷 P1538 迎春舞会之数字舞蹈
- 如何升级Windows 11正式版?四种方案都在这里了
- 小程序转码机器人-微信小程序转二维码
- 服务社-企语系统-F_air21.8的Debian11安装方法,也叫协同管理系统
热门文章
- 新年贺卡用python_新年贺卡图片手工制作精美简单
- web网站中常见攻击手法与原理
- 直播源码开发,css预加载旋转动画 与 流光字体
- [Android O] [RK3399] -- Vendor Storage 功能探究
- 2019牛客暑期多校训练营(第六场) 	Move
- 【Linux内核分析与应用-陈莉君老师】课程相关索引
- c0704 学生记录
- maya表情blendshape_带BlendShape表情的动作文件播放异常
- 正则表达式-验证座机号码
- org.apache.jasper.JasperException: java.lang.NullPointerException 解决办法