前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >无需依赖 Docker 环境制作 Java 应用镜像

无需依赖 Docker 环境制作 Java 应用镜像

作者头像
我的小碗汤
发布2023-03-20 10:12:57
7780
发布2023-03-20 10:12:57
举报
文章被收录于专栏:我的小碗汤

随着高版本的 Kubernetes 弃用 Docker,企业也可以不依赖 Docker 环境了,但是 DevOps 通过 Kubernetes 部署的话,仍然需要制作镜像,那么在没有 Docker 环境的情况下如何制作呢?推荐一款谷歌的开源工具 Jib,github 地址:

https://github.com/GoogleContainerTools/jib

它是一个无需 Docker 守护进程,也无需深入掌握 Docker 最佳实践的情况下,为 Java 应用程序构建 Docker 和 OCI 镜像, 它可以作为 Maven 和 Gradle 的插件,也可以作为 Java 库。

比如,使用 jib-maven-plugin 插件构建镜像的代码如下:

代码语言:javascript
复制
<plugin>
 <groupId>com.google.cloud.tools</groupId>
 <artifactId>jib-maven-plugin</artifactId>
 <version>3.3.0</version>
 <configuration>
  <from>
   <image>openjdk:13-jdk-alpine</image>
  </from>
  <to>
   <image>gcr.io/dhorse/client</image>
   <tags>
    <tag>102</tag>
   </tags>
   <auth>
    <!--连接镜像仓库的账号和密码 -->
    <username>username</username>
    <password>password</password>
   </auth>
  </to>
  <container>
   <ports>
    <port>8080</port>
   </ports>
  </container>
 </configuration>
 <executions>
  <execution>
   <phase>package</phase>
   <goals>
    <goal>build</goal>
   </goals>
  </execution>
 </executions>
</plugin>

然后使用命令进行构建:

代码语言:javascript
复制
mvn compile jib:build

可以看出,无需 docker 环境就可以实现镜像的构建。但是,要想通过平台类型的系统去为每个系统构建镜像,显然通过插件的方式,不太合适,因为需要每个被构建系统引入 jib-maven-plugin 插件才行,也就是需要改造每一个系统,这样就会带来一定的麻烦。那么有没有不需要改造系统的方式直接进行构建镜像呢?答案是通过 Jib-core 就可以实现。

首先,在使用 Jib-core 的项目中引入依赖,maven 如下:

代码语言:javascript
复制
<dependency>
 <groupId>com.google.cloud.tools</groupId>
 <artifactId>jib-core</artifactId>
 <version>0.23.0</version>
</dependency>

下面通过 DHorse 的代码:

https://github.com/tiandizhiguai/dhorse

看 Jib-core 是如何使用的,如下:

代码语言:javascript
复制
try {
 JibContainerBuilder jibContainerBuilder = null;
 if (StringUtils.isBlank(context.getProject().getBaseImage())) {
  jibContainerBuilder = Jib.fromScratch();
 } else {
  jibContainerBuilder = Jib.from(context.getProject().getBaseImage());
 }
 //连接镜像仓库5秒超时
 System.setProperty("jib.httpTimeout", "5000");
 System.setProperty("sendCredentialsOverHttp", "true");
 String fileNameWithExtension = targetFiles.get(0).toFile().getName();
 List<String> entrypoint = Arrays.asList("java", "-jar", fileNameWithExtension);
 RegistryImage registryImage = RegistryImage.named(context.getFullNameOfImage()).addCredential(
   context.getGlobalConfigAgg().getImageRepo().getAuthUser(),
   context.getGlobalConfigAgg().getImageRepo().getAuthPassword());
 jibContainerBuilder.addLayer(targetFiles, "/")
  .setEntrypoint(entrypoint)
  .addVolume(AbsoluteUnixPath.fromPath(Paths.get("/etc/localtime")))
  .containerize(Containerizer.to(registryImage)
    .setAllowInsecureRegistries(true)
    .addEventHandler(LogEvent.class, logEvent -> logger.info(logEvent.getMessage())));
} catch (Exception e) {
 logger.error("Failed to build image", e);
 return false;
}

其中,targetFiles 是要构建镜像的目标文件,比如 springboot 打包后的 jar 文件。

通过 Jib-core,可以很轻松的实现镜像构建,而不需要依赖任何其他环境,也不需要被构建系统做任何改造,非常方便。

如果你的项目有此需求,也可以通过 Jib-core 来实现。

可以通过 DHorse 了解更多:

https://github.com/tiandizhiguai/dhorse

- END -

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-02-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 进击云原生 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • - END -
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档