无需依赖Docker环境制作镜像

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

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

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

<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>

然后使用命令进行构建:

mvn compile jib:build

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

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

<dependency>
    <groupId>com.google.cloud.tools</groupId>
    <artifactId>jib-core</artifactId>
    <version>0.23.0</version>
</dependency>

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

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了解更多。

相关文章
|
5天前
|
关系型数据库 MySQL 应用服务中间件
Docker 镜像的创建(二)
Docker 镜像的创建(二)
|
5天前
|
缓存 Linux Apache
Docker 镜像的创建(一)
Docker 镜像的创建(一)
|
19天前
|
Docker 容器
paddleocr 在docker环境下部署_docker部署paddleocr,90%的人看完都说好
paddleocr 在docker环境下部署_docker部署paddleocr,90%的人看完都说好
|
19天前
|
SQL API 流计算
实时计算 Flink版产品使用合集之在Mac M1下的Docker环境中开启SQL Server代理的操作步骤是什么
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
7天前
|
Docker 容器
mac构建Docker镜像报错failed to solve with frontend dockerfile.v0: failed to create LLB definition: unexpec
mac构建Docker镜像报错failed to solve with frontend dockerfile.v0: failed to create LLB definition: unexpec
8 0
|
7天前
|
jenkins 持续交付 开发工具
蓝易云 - 基于Jenkins自动打包并部署docker环境
以上就是基于Jenkins自动打包并部署docker环境的基本步骤。在实际操作中,你可能需要根据你的具体需求进行一些调整。
113 0
|
9天前
|
监控 安全 云计算
云端防御战线:云计算环境下的网络安全策略构建高效稳定的Docker容器监控体系
【5月更文挑战第27天】 在数字化时代的浪潮中,云计算已成为企业与个人存储和处理数据的重要平台。然而,随着云服务使用率的飙升,网络威胁也愈发狡猾且复杂。本文将深入探讨在云计算环境中维护网络安全的挑战及策略,重点分析信息安全的关键组成部分,并提出多层次防御模型以增强云环境的数据保护能力。通过剖析最新的安全技术与实践,我们旨在为读者提供一套全面的网络安全解决方案蓝图。
|
13天前
|
缓存 Linux 开发工具
Ubantu docker学习笔记(二)拉取构建,属于你的镜像
Ubantu docker学习笔记(二)拉取构建,属于你的镜像
|
14天前
|
Java Maven Docker
Docker化Spring Boot3应用:从镜像构建到部署
本文介绍了如何在Linux上通过命令行构建和运行Spring Boot 3服务的Docker镜像。首先,基于Ubuntu创建包含JDK 21的基础镜像,然后使用Maven打包Spring Boot应用。接着,构建服务镜像,将应用和依赖添加到镜像中,并设置工作目录和暴露端口。最后,利用docker-compose部署服务,挂载宿主机目录以方便更新静态文件。Docker简化了应用部署,确保了不同环境的一致性。
78 2
Docker化Spring Boot3应用:从镜像构建到部署
|
17天前
|
JSON 测试技术 定位技术
【好用的个人工具】在Docker环境下部署Simple mind map思维导图工具
【5月更文挑战第16天】在Docker环境下部署Simple mind map思维导图工具
95 1
【好用的个人工具】在Docker环境下部署Simple mind map思维导图工具