无需依赖Docker环境制作镜像

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

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


    com.google.cloud.tools
    jib-maven-plugin
    3.3.0
    
        
            openjdk:13-jdk-alpine
        
        
            gcr.io/dhorse/client
            
                102
            
            

                username
                password
            
        
        
            
                8080
            
        
    
    
        
            package
            
                build
            
        
    

然后使用命令进行构建:

mvn compile jib:build

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

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


    com.google.cloud.tools
    jib-core
    0.23.0

下面通过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 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了解更多。

文章来源于互联网:无需依赖Docker环境制作镜像

THE END
分享
二维码