Environment
- Jib 0.9.10
- Jdk1.8
Foreward
What
针对Java构建容器镜像.提供以maven插件和gradle插件的方式快速构建镜像.
特点:1、快速;2、不依赖docker命令,不需要写Dockerfile;3、同docker一样采用分层构建;
缺点:1、不能指定volume挂载;2、
一些java启动命令不能使用,如java -jar **.jar –spring.profiles.active=prod …
Feature
Simple
原来构建步骤
现在构建步骤
开发人员无需了解Dockerfile的细节,通过jib上传镜像.
Fast
为什么会快呢?学习了docker的层概念,增量构建.传统构建是将jar包打入镜像,而jib的策略的将依赖的class文件上传.
不依赖于docker
构建过程完成不依赖于本地是否有安装docker.
缺点
不能通过jib指定volume,只能提前将volume构建在镜像中.
Usage
配置详解
1 | <build> |
常用命令
打包应用镜像并上传
不依赖本地docker
1 | $ mvn compile com.google.cloud.tools:jib-maven-plugin:0.9.11:build -Dimage=<MY IMAGE> |
依赖本地docker
1 | $ mvn compile com.google.cloud.tools:jib-maven-plugin:0.9.10:dockerBuild |
镜像打成tar包
1 | # 会在项目路径的target目录下生成jib-image.tar. |
导出镜像的Dockerfile
1 | # 默认生成在target/jib-docker-context下.-DjibTargetDir用于指定生成路径. |
配置私仓身份认证
如果没有使用credHelper,
通过Docker Credential Helps
通过Maven配置
配置Setting.xml文件
- maven加密方式参见Password Encryption
1 | <settings> |
Example
目标描述
使用spring boot构建一个java应用程序镜像,并指定profile运行.
为了能够指定profile运行,main启动代码要改动.
平常启动应用的命令是:
1 | java -jar -Xms512m -Xmx512m **.jar --spring.profiles.active=prod |
Jib打成的镜像,ENTRYPOINT实际的启动命令是:
1 | java -Xms512m -Xmx512m -cp app/libs/*:app/resources:app/classes package.MonitorApplication |
为了能够指定profile运行,需要在docker启动添加参数.
1 | @SpringBootApplication |
配置pom.xml
1 | <?xml version="1.0" encoding="UTF-8"?> |
构建并上传images
1 | $ mvn package |
启动容器
1 | $ docker pull [镜像名称] |
结合Ansible Scripts
配置ansible脚本
1 | $ mkdir -p /opt/ansible-biz/roles/monitor/tasks |
启动
$ ansible-playbook -i hosts -e profile=prod sity.yml
Expend Study
使用alpine镜像或distroless镜像作为基础构建镜像.
Reference Resources
- Github Jib/jib)
- Jib介绍视屏
- Jib Blog
- Jib PPT