DHorse系列文章之镜像制作

dhorse,系列,文章,镜像,制作 · 浏览次数 : 267

小编点评

**使用Docker创建一个镜像** 1. **使用docker commit制作镜像** ```docker commit -t dhorse/client:102 .` 2. **使用Dockerfile制作镜像** ```dockerfile FROM openjdk:openjdk:13-jdk-alpine ADD client-1.0.0.jar /client.jar ENTRYPOINT [\"java\",\"-jar\",\"/client.jar\"] ``` 3. **使用docker build命令构建镜像** ```docker build -t dhorse/client:102 . ``` **使用Jib创建一个镜像** 1. **引入Jib依赖** ``` com.google.cloud.tools jib-core 0.22.0 ``` 2. **使用Jib创建一个镜像** ```java 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(); // 创建镜像 RegistryImage registryImage = RegistryImage.named(context.getFullNameOfImage()).addCredential( context.getGlobalConfigAgg().getImageRepo().getAuthUser(), context.getGlobalConfigAgg().getImageRepo().getAuthPassword() ); // 添加镜像层 jibContainerBuilder.addLayer(targetFiles, "/"); .setEntrypoint(Arrays.asList("java", "-jar", fileNameWithExtension)); // 设置允许无证书连接 .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; } ```

正文

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

与DHorse系列文章之镜像制作相似的内容:

DHorse系列文章之镜像制作

DHorse系列文章之镜像制作 制作镜像常用的工具 使用Docker制作镜像 1.使用docker commit制作 该命令使用比较简单,可以自行网上搜索教程。 2.使用Dockerfile制作 这种方式,需要编写如下的Dokerfile文件: FROM openjdk:openjdk:13-jdk

DHorse系列文章之maven打包

插件打包 这种方式是平时最常用的,首先要下载并安装maven环境,然后在被打包的项目中引入插件,有各种各样的打包插件,比如springboot自带插件: org.springframework.boot spring-b

DHorse操作手册

在介绍DHorse的操作之前,我们先来看一下发布一个系统的流程是什么样的。 发布系统的流程 我们以一个Springboot系统为例,来说明一下发布流程。 1.首先从代码仓库下载代码,比如Gitlab; 2.接着是进行打包,比如使用Maven; 3.如果要使用k8s作为编排,还需要把步骤2产生的包制作

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

DHorse的配置文件

首先看一下DHorse的配置文件,如下: # # 本软件遵守Apache开源许可协议2.0, # 详情见:http://www.apache.org/licenses/LICENSE-2.0 # # # Common # #服务端口,默认8100 #server.port: 8100 #系统数据文件

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

版本说明 新增特性 支持k8s的v1.30.x版本; 优化特性 优化回滚功能; 修复注册来源的回滚问题; 新增和修改应用时校验应用名; 升级kubernetes-client至v6.13.0; 调整部署明细表头展示; 升级指南 升级指南 DHorse介绍 DHorse是一个轻量级、简单易用的云应用管

DHorse的链路追踪

目前,DHorse的链路追踪功能是通过SkyWalking来实现。实现原理是DHorse在部署应用时,通过指定SkyWalking的Agent来收集服务的调用链路信息。下面就来具体看一下DHorse如何使用Agent的功能。 链路追踪配置 在“系统配置”菜单,打开“链路追踪模板”菜单,如图1所示:

DHorse日志收集原理

实现原理 基于k8s的日志收集主要有两种方案,一是使用daemoset,另一种是基于sidecar。两种方式各有优缺点,目前DHorse是基于daemoset实现的。如图1所示: 图1 在每个k8s集群中启动一个daemoset组件,即Filebeat的服务,监控/var/log/container

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

## 版本说明 ### 新增特性 * 构建版本、部署应用时的线程池可配置化; ### 优化特性 * 构建版本跳过单元测试; ### 解决问题 * 解决Vue应用详情页面报错的问题; * 解决Linux环境下脚本运行失败的问题; * 解决下载Maven安装文件失败的问题; ### 升级说明 下载v1.