无需依赖Docker环境制作镜像

无需,依赖,docker,环境,制作,镜像 · 浏览次数 : 663

小编点评

## Jib-core 如何实现镜像构建? Jib-core 是一个无需Docker环境的 Java 镜像构建工具,可以作为 Maven 和 Gradle 插件,也作为 Java 库。它可以实现以下功能: 1. 从镜像仓库中拉取镜像文件 2. 创建镜像容器 3. 设置镜像的入口点 4. 设置容器的权限 5. 设置镜像仓库的认证信息 **步骤:** 1. 在使用Jib-core的项目中引入依赖: ``` com.google.cloud.tools jib-core 0.23.0 ``` 2. 通过 DHorse 代码构建镜像: ```java try { JibContainerBuilder jibContainerBuilder = null; if (StringUtils.isBlank(context.getProject().getBaseImage())) { jibContainerBuilder = Jib.fromScratch(); } else { jibContainerBuilder = Jib.from(context.getProject().getBaseImage()); } // 设置镜像仓库的信息 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())); // 执行镜像构建 return jibContainerBuilder.build(); } catch (Exception e) { // 处理错误 return false; } ``` **优点:** * 不需要Docker环境 * 可以实现无状态构建 * 可以作为 Maven 和 Gradle 插件 * 可以作为 Java 库 **注意:** * Jib-core 需要 Java 11 或更高版本 * 需要配置镜像仓库的用户名和密码

正文

随着高版本的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>

下面通过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来实现。

可以通过DHorse了解更多。

与无需依赖Docker环境制作镜像相似的内容:

无需依赖Docker环境制作镜像

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

DHorse v1.2.1 发布,基于k8s的发布平台

# 综述 DHorse是一个简单易用、以应用为中心的云原生DevOps系统,具有持续集成、持续部署、微服务治理等功能,无需安装依赖Docker、Maven、Node等环境即可发布Java、Vue、React应用,主要特点:部署简单、操作简洁、功能快速。 # 优化内容 * 优化jvm指标收集时dhor

DHorse v1.3.0 发布,基于k8s的发布平台

# 综述 DHorse是一个简单易用、以应用为中心的云原生DevOps系统,具有持续集成、持续部署、微服务治理等功能,无需安装依赖Docker、Maven、Node等环境即可发布Java、Vue、React应用,主要特点:部署简单、操作简洁、功能快速。 # 新增特性 * 增加prometheus的配

探索Web Components

这篇文章介绍了Web Components技术,它允许开发者创建可复用、封装良好的自定义HTML元素,并直接在浏览器中运行,无需依赖外部库。通过组合HTML模板、Shadow DOM、自定义元素和HTML imports,Web Components增强了原生DOM的功能,提高了组件化开发的封装性和...

Blazor的技术优点

Blazor是一种使用.NET和C#构建客户端Web应用程序的新兴技术。它允许开发者在浏览器中直接运行.NET代码,而无需依赖JavaScript。Blazor的技术优点主要表现在以下几个方面: 单一语言栈:Blazor允许开发者使用C#和.NET进行全栈开发。一种语言用于前端和后端可以大大简化开发

一键启动的AI离线知识库,无需复杂环境依赖,小白都能上手了

简介 在人工智能技术飞速发展的今天,我们经常面临一个挑战:如何快速、简便地部署和使用AI技术?AntSK项目,一个开源的AI知识库和智能体,就是为了解决这一问题而诞生的。现在,我们自豪地宣布,AntSK已经实现了无需复杂部署的一键启动功能,让每个人都能轻松拥抱AI的便利。 为什么选择AntSK? 无

设计模式之抽象工厂模式(学习笔记)

定义 抽象工厂模式是一种创建型设计模式,它提供一个接口,用于创建一系列相关或依赖的对象,而无需指定它们的具体类。抽象工厂模式将对象的创建过程抽象化,允许子类通过实现具体工厂类来定制对象的创建。 为什么使用抽象工厂模式 产品族的一致性 抽象工厂模式确保同一产品族中的对象之间的一致性。 部分遵循开闭原则

极速进化,光速转录,C++版本人工智能实时语音转文字(字幕/语音识别)Whisper.cpp实践

业界良心OpenAI开源的Whisper模型是开源语音转文字领域的执牛耳者,白璧微瑕之处在于无法通过苹果M芯片优化转录效率,Whisper.cpp 则是 Whisper 模型的 C/C++ 移植版本,它具有无依赖项、内存使用量低等特点,重要的是增加了 Core ML 支持,完美适配苹果M系列芯片。

一文搞懂Maven配置,从此不再糊涂下载依赖(文末有成品)

一般来说Maven都是配合着idea一起使用,下载依赖速度慢就去网上找个镜像配置一下,但总会遇到莫名其妙的问题,比如镜像源不生效、Error reading file pom.xml等等。今天详细讲解一下maven配置文件settings.xml的配置方法。 小知识 maven的配置文件存在于两个地

QGIS开发笔记(二):Windows安装版二次开发环境搭建(上):安装OSGeo4W运行依赖其Qt的基础环境Demo

前言 使用QGis的目的是进行二次开发,或者说是融入我们的应用(无人车、无人船、无人机),本片描述搭建QGis二次基础开发环境,由于实在是太长了,进行了分篇: 上半部分:主要是安装好后,使用QtCreator可以使用QGIs的apps下的Qt使用对应的编译器编译不带qgis的空工程。 下半部分:在上