首页 > 其他分享 >DHorse系列文章之镜像制作

DHorse系列文章之镜像制作

时间:2022-11-18 13:24:09浏览次数:75  
标签:Jib DHorse jar 构建 文章 镜像 docker

DHorse系列文章之镜像制作

制作镜像常用的工具

使用Docker制作镜像

1.使用docker commit制作
该命令使用比较简单,可以自行网上搜索教程。
2.使用Dockerfile制作
这种方式,需要编写如下的Dokerfile文件:

FROM openjdk:openjdk:13-jdk-alpine
ADD client-1.0.0.jar /client.jar
ENTRYPOINT ["java","-jar","/client.jar"]

并且执行如下命令:

docker build -t dhorse/client:102 .

才能完成镜像的制作。
通过以上可以看出,如果要使用docker制作镜像的话,必须要有docker环境,而且需要编写Dockerfile文件。当然,也可以不用安装docker环境,而且使用doker的远程接口:post/build。但是,在远程服务器中仍然需要安装doker环境和编写Dockerfile。

DHorse的技术选型

DHorse作为一个简单易用的DevOps开发平台,在一开始设计时就考虑到了对外部环境的依赖性。无论是从安装还是从使用的角度,都应该尽量减少对外部环境的依赖,尤其是对docker的依赖。不依赖docker还有另外一个重要的原因,k8s在高版本也逐渐不依赖docker了。而DHorse主要还是基于k8s来实现部署的,因此DHorse在构建镜像时更不能依赖docker环境。那么,在不依赖docker的情况下,是否可以通过其他技术构建镜像呢?答案是有的,比如通过Jib就可以实现。

Jib介绍

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.22.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来实现。

标签:Jib,DHorse,jar,构建,文章,镜像,docker
From: https://www.cnblogs.com/tiandizhiguai/p/16902889.html

相关文章

  • 海思YOLOv3 wk模型在nnie设备上面推理 转载的文章
    前言本文主要讲述如何运行在nnie设备SOC上面来运行YOLOv3模型,在开始知道,我们默认读者已经把YOLOv3模型转换完成并取得还是wk指令模型,如果不明白如何获取wk指令模型,可以参考......
  • 搭建私有镜像仓库
    目录杭州阿里mkmk仓库启动本地registerserver查看所有仓库修改client端配置测试本地register私有镜像仓库批量推送镜像gpu带数据启动register杭州阿里mkm......
  • k8s:bootstrap方式部署 kubelet的相关参数设置:【重点一篇文章】
    重点!!相关参数必须适应!!有些参数不可以配置!!!!! kube-apiserver特别注意:使用bootstrap,apiserver中千万 【不可以】 配置以下kubelet认证相关参数--kubelet-certifica......
  • SpringClouldAlibaba 之 Sentinel流控规则同步到nacos(并重新生成镜像)
    前言上一篇我们将流控规则配置到了nacos让服务启动时拉取流控规则从而实现持久化但是是有一个缺陷的,毕竟在nacos中维护这个流控规则不太友好,毕竟sentinel为我们提供了可视......
  • 镜像加速资源
    镜像加速资源背景很多软件的源服务器都在国外,比如Ubuntu、DockerHub在国内下载很慢,需要加速。npmjs.org镜像nvm使用镜像加速下载nodeexportNVM_NODEJS_ORG_MIR......
  • DHorse系列文章之maven打包
    插件打包这种方式是平时最常用的,首先要下载并安装maven环境,然后在被打包的项目中引入插件,有各种各样的打包插件,比如springboot自带插件:<plugin> <groupId>org.springfra......
  • npm 淘宝镜像的安装
    npm淘宝镜像的安装原淘宝npm域名即将停止解析,官方链接,以下命令已更新,放心食用。方法一:使用阿里定制的cnpm命令行工具代替默认的npm,输入以下代码npminstall-gcnpm......
  • Maven之阿里云镜像仓库配置
    Maven镜像简介阿里云Maven中央仓库为阿里云云效提供的公共代理仓库,帮助研发人员提高研发生产效率,使用阿里云Maven中央仓库作为下载源,速度更快更稳定。阿里云云效 是企......
  • python爬取公众号文章发布时间
    使用xpath取出来的是空,爬取到本地的html,时间的标签如下,内容也是是空的<emid="publish_time"class="rich_media_metarich_media_meta_text"></em>经过查找发现网页使用的......
  • 一篇文章彻底搞懂base64编码原理
    开始在互联网中的每一刻,你可能都在享受着Base64带来的便捷,但对于Base64的基础原理又了解多少?今天这篇文章带领大家了解一下Base64的底层实现。base64是什么东东呢?Base64编码......