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

无需依赖Docker环境制作镜像

原创
作者头像
用户9398785
发布2023-08-30 19:41:08
1780
发布2023-08-30 19:41:08
举报
文章被收录于专栏:云发布云发布

随着高版本的Kubernetes弃用Docker,企业也可以不依赖Docker环境了,但是DevOps通过Kubernetes部署的话,仍然需要制作镜像,那么在没有Docker环境的情况下如何制作呢?推荐一款谷歌的开源工具Jib,github地址,它是一个无需Docker守护进程——也无需深入掌握Docker最佳实践的情况下,为Java应用程序构建Docker和OCI镜像, 它可以作为Maven和Gradle的插件,也可以作为Java库。

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

代码语言:html
复制
<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>

然后使用命令进行构建:

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

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

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

代码语言:html
复制
<dependency>

    <groupId>com.google.cloud.tools</groupId>

    <artifactId>jib-core</artifactId>

    <version>0.23.0</version>

</dependency>

下面通过https://github.com/512team/dhorse的代码,看Jib-core是如何使用的,如下:

代码语言:java
复制
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来实现。

可以通过https://github.com/512team/dhorse了解更多。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

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