为了更方便将 Java 应用程序容器化,Google 于去年推出了 Jib 工具。Jib 是一个快速而简单的容器镜像构建工具,它负责处理将应用程序打包到容器镜像中所需的所有步骤。
Jib 构建流程
目标
- 快速 — 快速部署您的更改。Jib 将你的应用程序分成多个层,从类中分离依赖项。你不必等待 Docker 重建整个 Java 应用程序 —— 只需部署更改的层即可
- 可重现 — 使用相同内容重建容器镜像
- Daemonless — 减少 CLI 依赖性。从 Maven 或 Gradle 中构建 Docker 镜像,然后推送到你选择的任何 注册表 ,无需编写 Dockerfiles 并调用 docker build/push
Jib 以 Maven 和 Gradle 插件形式提供,可以直接构建 Java 应用的 Docker 和 OCI 镜像的 类库 。它不需要你编写 Dockerfile 或安装 Docker,而且可以直接集成到 Maven 和 Gradle中 —— 只需要将插件添加到构建中,就可以立即将 Java 应用程序容器化。
从去年发布测试版起,开发团队就收到了社区积极的反馈和贡献。现在, Jib 1.0 GA 终于发布了, 这是一个稳定且可用于生产环境的版本 。
Jib 1.0 值得关注的新特性
对 WAR 项目容器化(Dockerize WAR)
我们知道 Java 编写的 Web 应用程序通常会被打包成 WAR 文件。如今,Jib 已经能够对 WAR 项目进行容器化,且完全无需额外配置。只需要直接运行以下命令:
Maven:
$ mvn package jib: build
Gradle:
$ gradle jib
该容器的默认应用服务器为 Jetty,但也可以对基础镜像及 appRoot 进行配置调整,从而使用 tomcat 等其它服务器选项:
Maven ( pom .xml):
<configuration> <from> <image>tomcat:8.5-jre8-alpine</image> </from> <to> <image>gcr.io/my-project/my-war-image</image> </to> <container> <appRoot>/usr/local/tomcat/webapps/my-webapp</appRoot> </container> </configuration>
Gradle (build.gradle):
jib { from.image = 'tomcat:8.5-jre8-alpine' to.image = 'gcr.io/my-project/my-war-image' container.appRoot = '/usr/local/tomcat/webapps/my-webapp' }