首页 > 其他分享 >无需依赖Docker环境制作镜像

无需依赖Docker环境制作镜像

时间:2023-02-03 13:33:54浏览次数:54  
标签:core 无需 Jib jib 构建 镜像 Docker

随着高版本的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了解更多。

标签:core,无需,Jib,jib,构建,镜像,Docker
From: https://www.cnblogs.com/tiandizhiguai/p/17088911.html

相关文章

  • 无网环境安装docker之--rpm
    总体思路:找一台可以联网的linux,下载docker的RPM依赖包而不进行安装(yumlocalinstall),将所有依赖的rpm环境打包好,再在无网环境中解压逐一安装(rpm:  --force--nodeps)。系......
  • docker 命令
    查询dockersearch    |过滤 --filter=下载拉去dockerpull   |制定版本 dockerpullmysql:5.7删除dockerrmi-f  新建容器并启动dockerru......
  • docker 安装kafka(单机版本)
    网上大多数是这个镜像zookeeper镜像dockerpullwurstmeister/zookeeperkafka镜像dockerpullwurstmeister/kafka  dockerrun-d-p2181:2181--namezookeepe......
  • 在腾讯云上创建一个玩具docker-mysql数据服务
    有时候开发需求会自己做一下测试数据,在自己电脑本地安装的服务多了电脑环境会搞的很乱,这时使用云服务器安装个docker服务是一个不错的寻找。下面步骤是在腾讯云上安装dock......
  • Docker部署XXL-Job
    Docker部署XXL-Job前置条件必须保证Client与Server互通Linux上已经安装好了Docker地址:分布式任务调度平台XXL-JOB(xuxueli.com)1.创建数据库脚本从官网中......
  • 关于服务发现、Feign、Zuul 以及docker之间的依赖
    Consul和Eureka都是用来解决服务发现(就是类似DNS服务)。Eureka在应用主类中通过加上​​@EnableDiscoveryClient​​,该注解能激活Eureka中的DiscoveryClient。(微服务中......
  • Windows安装Docker
    在sentinel的搭建中,因为docker在公有云上,sentinel无法访问本地IP,所以使用windows安装docker。注:最新为DockerDesktop1、下载WindwosDocker:DownloadDockerDesktop|......
  • 山东联通版创维E900V21C盒子刷入Armbiam并安装宝塔和Docker
     硬件首先介绍下硬件,这款盒子是在海鲜市场以55元的价格买下的,当然也有更便宜的,成色和版本可能有些许差异,要注意的是这款盒子是有海思芯片的版本不要买错了,一般来说......
  • win下如何用heidiSQL连接Docker Desktop中的pg数据库
    step1:   step2:  setp3:在container中就出现了这个示例 ......
  • Dockerfile 从入门到放弃
    目录浅言碎语Dockerfile基本结构Dockerfile指令FROMARGARG指令生效范围证明FROM之前的ARG对FROM后的构建不生效证明FROM之前的ARG对当前Dockerfile内所有F......