CN114327754B - 一种基于容器分层技术的镜像导出与组装方法 - Google Patents
一种基于容器分层技术的镜像导出与组装方法 Download PDFInfo
- Publication number
- CN114327754B CN114327754B CN202111530921.5A CN202111530921A CN114327754B CN 114327754 B CN114327754 B CN 114327754B CN 202111530921 A CN202111530921 A CN 202111530921A CN 114327754 B CN114327754 B CN 114327754B
- Authority
- CN
- China
- Prior art keywords
- layer
- container
- user
- image
- mirror image
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种基于容器分层技术的镜像导出与组装方法,包括步骤1、建立用户Layer元数据模型,使用户能够编辑容器,对Layer进行标记;步骤2、用户基于用户Layer元数据模型自定义Container Layer和Image Layer的组合;步骤3:容器进程按照步骤2的组合将用户Layer与Image Layer按层导出与组装,实现容器镜像的面向用户自定义按层导出与组装;所述Container Layer为容器实例层;所述Image Layer为容器镜像层。本发明基于容器分层技术,将容器层的创建、读写、导出以及组装交由用户完成,用户能够自定义选择容器层进行所需容器镜像的组装与创建。
Description
技术领域
本发明属于云原生技术领域,具体涉及一种基于容器分层技术的镜像导出与组装方法。
背景技术
云原生技术是目前最先进的软件框架,其能够为软件定制一种敏捷度高、扩展性强、持续交付、持续开发与运维的软件实践路径。而基于容器的软件运行环境,是云原生的技术底座,是承载软件运行的基础环境。因此,容器使用好坏在云原生架构中至关重要。
容器是利用分层技术进行容器镜像的读写与组合的,按照其每层(layer)承载的内容以及读写权限,可分为基础镜像层(Image Layer)和数据镜像层(Container Layer),其中Image Layer为操作系统基础文件层,仅具有只读权限,不能进行写数据,如果写数据,则需要在镜像上新增一层Container Layer,在其上实现写操作,如图1所示。
容器镜像的分层和组装是由容器进程自己来操作和完成的,用户不用关心容器镜像的分层与组装,以及容器实例如何分层加载,减少了用户对容器使用的复杂度,但同时用户对容器操作的灵活度也随之变差,会出现以下问题:
(1)容器镜像跨集群传输,需要以容器为单位进行全量传输
容器镜像是按照层进行组装的,但对于多个容器镜像,公用Image Layer层(以下简称“Base Layers”),其差别在于不同的容器镜像的数据层Container Layer(以下简称“Data Layers”)不同。然而容器镜像的导出、传输和导入均是以镜像为单位进完成,由容器服务来控制镜像层的组装。
在跨集群传输容器镜像时,需要将Base Layers和Data Layer的容器镜像包全量传输,无论目标集群的镜像库中是否已经存在Base Layers。然而,Base Layers通常容量较大,至少占用百兆空间,而Data Layers通常仅有几十兆,导致在跨集群传输时,大部分时间是在传输重复的Base Laysers,导致传输效率低下。
(2)用户无法自定义和组装容器镜像
用户对容器镜像进行修改会,会新增Container Layers,不同的操作可生成不同的Layer,这些针对容器镜像的操作,很大程度能够被复用,但容器镜像的分层导出、导入以及组装均由容器服务完成,用户不能根据自己修改过的记录,将多个Data Layers与BaseLayers自定义组装并复用,导致用户对容器操作时产生的Data Layers不具备重用的条件。
即现有容器的应用技术中,容器的分层、组装以及创建过程均由容器自行控制,对用户不可见、不可控。具体的,对于容器自身来说,其按照分层技术进行导出、传输、下载、导入以及组装,但对于用户来说,容器镜像是全量式的导出、传输和导入,用户自己无法选择和控制容器按层组装成容器镜像。因此,用户使用容器操作的最小单元为容器镜像(Image)和容器实例(Container),导致对容器操作灵活度不高,用户不能基于容器层,组装自己所需要的容器;并且,在跨集群使用容器时,需要以Image为单位全量进行容器镜像传输,在网络环境不好,或者有较严格的网络要求的环境下,传输效率低下。
发明内容
本发明所要解决的技术问题是针对上述现有技术的不足,提供一种基于容器分层技术的镜像导出与组装方法,将容器镜像在导出、导入与组装过程中加入用户参与,用户可根据个性化需求完成指定Data Layers的导出,实现Base Layers与Data Layers的分离管理与传输,并能够选择Data Layers与Base Layers进行容器镜像的组装,增加对容器操作的粒度,提升容器操作的复用能力。
为实现上述技术目的,本发明采取的技术方案为:
一种基于容器分层技术的镜像导出与组装方法,包括:
步骤1:建立用户Layer元数据模型,使用户能够编辑容器,对Layer进行标记;
步骤2:用户基于用户Layer元数据模型自定义Container Layer和Image Layer的组合;
步骤3:容器进程按照步骤2的组合将用户Layer与Image Layer按层导出与组装,实现容器镜像的面向用户自定义按层导出与组装;
所述Container Layer为容器实例层;
所述Image Layer为容器镜像层。
为优化上述技术方案,采取的具体措施还包括:
上述的步骤1所述用户Layer即用户需要对容器进行写入操作,从而新增出来的Container Layer,该Layer包括用户软件的安装部署、文件的修改内容。
上述的步骤1通过建立用户Layer元数据模型,来记录用户对Layer的标识和操作简介,方便用户能够对Layer认知和选择,同时元数据还记录与容器服务进程操作相关的数据属性,以确保用户自定义的Layer能够让容器服务进程识别并组装。
上述的步骤1使用三元组对用户自定义Layer元数据建模,建立的用户Layer元数据模型为:
<layer_id,<custom_props,container_props>>
其中,layer_id,为用户Layer的唯一标识,具有全局唯一性;
custom_props,为与用户相关的数据属性;
container_props,为与容器服务进程相关的属性,能够被容器服务识别,及能够被Image Manifest和Image Config兼容的属性。
上述的custom_props的内容为:
<user_id,create_time,tags,description,shared,users>
其中各内容含义为:
user_id:所属用户的id,即创建者id;
create_time:Layer创建时间;
tags:json格式数据,用户可自行打标签;
description:对Layer的描述;
shared:是否可以被共享;
users:list数据格式,使用本Layer的用户群。
上述的container_props的内容为:
<schemaVersion,os,architecture,media_type,size,location,digest>
其中各内容含义为:
schemaVersion:schema的版本信息;
os:所属操作系统;
architecture:CPU架构类型;
media_type:Layer的打包格式;
size:Layer的大小;
location:Layer的位置,标识静态链接文件,用于被Image Config中的rootfs属性所识别;
digest:摘要信息,存储sha256的值。
上述的步骤2具体为:
用户从基础或公用镜像库创建容器实例,并在实例上进行个性化写操作,针对用户的操作,容器进程在Image Layer上创建Container Layer供用户完成操作,并在过程中针对Container Layer元数据模型进行修改,完成用户Layer的创建。
上述的步骤3具体包括:
步骤31:分层导出Container Layer并进行传输:
用户根据步骤2自定义的Container Layer,选中元数据记录的容器镜像内容中所包含的Layers,将容器镜像中的Data Layers按层导出,导出后对Image Layer压缩后跨集群传输,并在新集群的镜像库中记录元数据;
步骤32:组装Container Layer与Image Layer:
用户查看目的集群已存在的Layer,根据元数据中的custom_props,识别出需要组装在一起的Container Layer与Image Layer;
然后使用元数据中的container_props修改Image Manifest和Image Config配置文件的对应项,使得容器进程能够识别用户提交的Container Layer;
然后再由容器进程读取Manifest和Config,完成Container Layer与Image Layer的组装。
上述的步骤32在跨集群传输过程中,以增量方式传输,仅传输用户读写的Container Layer其在目的集群与已经存在的Image Layer进行组装。
本发明具有以下有益效果:
本发明基于容器分层技术,将容器层的创建、读写、导出以及组装交由用户完成,用户能够自定义选择容器层进行所需容器镜像的组装与创建。
同时,在跨集群容器传输过程中,以增量方式传输,仅需要传输用户读写的Container Layer,在目的集群与已经存在的Image Layer进行组装,提升传输效率。
此外,本发明可成为容器镜像开放给用户操作权限的标准。
具体的,本发明给出了针对用户创建读写层Container Layer的元数据建模方式,以及容器按层标识、组装的流程方法,将原先由容器对用户透明的容器分层组装技术进行拆解,增加用户操作部分,让用户能够根据自己需求进行容器按层增量式组装,增加用户控制的粒度,实现用户自定义的按层操作。
附图说明
图1为容器分成技术示意图;
图2为容器镜像文件组成示意图;
图3为容器镜像组装和容器创建流程示意图;
图4为用户Layer组装流程示意图。
具体实施方式
以下结合附图对本发明的实施例作进一步详细描述。
为了更清楚的体现本发明的内容,首先说明容器自行组装镜像的方式。
容器的一个镜像包含了四个部分,分别是Image Index,Image Manifest,Imageconfig以及Filesystem Layers。
其中,Image Index为可选为了支持多平台的元数据描述文件,其为可选项,非必要;
Image Manifest是对Image Config和Filesystem Layer的描述文件,包含了他们的media type,size以及sha256码等;
Image config是容器镜像的配置文件,其中rootfs指定了镜像所包含的Layer;
Filesystem Layers就是容器的分层,即容器的文件系统。
上述四个部分之间的对应关系如图2所示。
容器镜像的下载组装和容器创建流程如图3所示:
s001:启动容器执行的命令后,容器服务进程查看镜像是否本地存在,若存在则直接启动镜像,否则去镜像库获取;
s002:镜像是按层组装,也是按层获取的,若镜像配置文件中包含的层有部分在本地镜像库中,则本地部分不用重新获取,仅针对本地镜像库中不存在的镜像层进行获取;
s003:根据下载的Layer与本地Layer进行组合,修改配置文件,完成镜像的本地组装,随后根据镜像启动容器。
本发明通过为用户读写的Container Layer进行数据建模,标定修改的内容,再向容器内部修改相关的配置文件,允许容器进程能够识别用户自定义内容,实现容器镜像面向用户自定义按层导出,并完成用户自定义组装容器镜像。即本发明在容器操作的基础上,加入可被用户自定义分层导出和组装部分,形成一套可被用户操作的容器镜像分层导出与组装技术。
具体的,一种基于容器分层技术的镜像导出与组装方法,包括:
步骤1:建立用户Layer元数据模型,使用户能够编辑容器,对Layer进行标记;
所述用户Layer即用户需要对容器进行写入操作,从而新增出来的ContainerLayer,这一层的Layer包括了用户软件的安装部署、文件的修改等内容。
通过建立用户Layer元数据模型,来记录用户对Layer的标识和操作简介,方便用户能够对Layer认知和选择,同时元数据还记录与容器服务进程操作相关的数据属性,以确保用户自定义的Layer能够让容器服务进程识别并组装。
综上,选择使用三元组对用户自定义Layer元数据建模,模型定义如下:
<layer_id,<custom_props,container_props>>
其中,layer_id,为用户Layer的唯一标识,具有全局唯一性;
custom_props,为与用户相关的数据属性,其内容为:
<user_id,create_time,tags,description,shared,users>
user_id:所属用户的id,即创建者id
create_time:Layer创建时间
tags:json格式数据,用户可自行打标签
description:对Layer的描述
shared:是否可以被共享
users:list数据格式,使用本Layer的用户群
container_props,为与容器服务进程相关的属性,能够被容器服务识别,及能够被Image Manifest和Image Config兼容的属性,其内容为:
<schemaVersion,os,architecture,media_type,size,location,digest>
schemaVersion:schema的版本信息
os:所属操作系统,如linux等
architecture:CPU架构类型,如amd64、arm64等
media_type:定义了Layer的打包格式,如tar,tar+gzip等
size:Layer的大小
location:Layer的位置,标识静态链接文件,用于被Image Config中的rootfs属性所识别
digest:摘要信息,存储sha256的值。
通过上述数据模型,用户既可以标识自己的layer,同时数据能够被容器进程所识别,用于填充Manifest和Config信息。
步骤2:用户基于用户Layer元数据模型自定义Container Layer和Image Layer的组合;
对用户Layer元数据建模后,使用户能够编辑容器,对Layer进行标记,具体的:
用户从基础或公用镜像库创建容器实例,并在实例上进行个性化写操作,针对用户的操作,容器进程在Image Layer上创建Container Layer供用户完成操作,并在过程中针对Container Layer元数据模型进行修改,完成用户Layer的创建。
步骤3:容器进程按照步骤2的组合将用户Layer与Image Layer按层导出与组装,实现容器镜像的面向用户自定义按层导出与组装,步骤2和3的具体流程如图4所示。
步骤31:分层导出Container Layer并进行传输;
用户根据步骤1自定义的Container Layer,选中元数据记录的容器镜像内容中所包含的Layers,将容器镜像中的Data Layers按层导出,导出后对镜像层压缩后跨集群传输,并在新集群的镜像库中记录元数据。
步骤32:组装Container Layer与Image Layer;
用户能够查看已存在的Layer,根据元数据中的custom_props,识别出需要组装在一起的Layer,然后使用元数据中的container_props修改Image Manifest和Image Config配置文件的对应项,使得容器进程能够识别用户提交的Container Layer,然后再由容器进程读取Manifest和Config,完成Container Layer与Image Layer的组装。
综上,由用户参与的容器镜像的导出和组装完成。
原本对用户透明的容器镜像下载和拉取过程,变成对用户开放,用户能够自定义Container Layer和Image Layer的组合,实现了容器镜像的控制权由容器服务交给了用户自己。
以上仅是本发明的优选实施方式,本发明的保护范围并不仅局限于上述实施例,凡属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,应视为本发明的保护范围。
Claims (7)
1.一种基于容器分层技术的镜像导出与组装方法,其特征在于,包括:
步骤1:建立用户Layer元数据模型,使用户能够编辑容器,对Layer进行标记;
步骤2:用户基于用户Layer元数据模型自定义Container Layer和Image Layer的组合;
步骤3:容器进程按照步骤2的组合将用户Layer与Image Layer按层导出与组装,实现容器镜像的面向用户自定义按层导出与组装;
所述Container Layer为容器实例层;
所述Image Layer为容器镜像层;
所述用户Layer即用户需要对容器进行写入操作,从而新增出来的Container Layer,该Container Layer包括用户软件的安装部署、文件的修改内容;
所述步骤3具体包括:
步骤31:分层导出Container Layer并进行传输:
用户根据步骤2自定义的Container Layer,选中元数据记录的容器镜像内容中所包含的Layers,将容器镜像中的Container Layer按层导出,导出后对Image Layer压缩后跨集群传输,并在新集群的镜像库中记录元数据;
步骤32:组装Container Layer与Image Layer:
用户查看目的集群已存在的Layer,根据元数据中的custom_props,识别出需要组装在一起的Container Layer与Image Layer;
然后使用元数据中的container_props修改Image Manifest和Image Config配置文件的对应项,使得容器进程能够识别用户提交的Container Layer;
然后再由容器进程读取Manifest和Config,完成Container Layer与Image Layer的组装。
2.根据权利要求1所述的一种基于容器分层技术的镜像导出与组装方法,其特征在于,所述步骤1通过建立用户Layer元数据模型,来记录用户对Layer的标识和操作简介,方便用户能够对Layer认知和选择,同时元数据还记录与容器服务进程操作相关的数据属性,以确保用户自定义的Layer能够让容器服务进程识别并组装。
3.根据权利要求1所述的一种基于容器分层技术的镜像导出与组装方法,其特征在于,所述步骤1使用三元组对用户自定义Layer元数据建模,建立的用户Layer元数据模型为:
<layer_id,<custom_props,container_props>>
其中,layer_id,为用户Layer的唯一标识,具有全局唯一性;
custom_props,为与用户相关的数据属性;
container_props,为与容器服务进程相关的属性,能够被容器服务识别,及能够被Image Manifest和Image Config兼容的属性。
4.根据权利要求3所述的一种基于容器分层技术的镜像导出与组装方法,其特征在于,所述custom_props的内容为:
<user_id,create_time,tags,description,shared,users>
其中各内容含义为:
user_id:所属用户的id,即创建者id;
create_time:Layer创建时间;
tags:json格式数据,用户可自行打标签;
description:对Layer的描述;
shared:是否可以被共享;
users:list数据格式,使用本Layer的用户群。
5.根据权利要求3所述的一种基于容器分层技术的镜像导出与组装方法,其特征在于,所述container_props的内容为:
<schemaVersion,os,architecture,media_type,size,location,digest>
其中各内容含义为:
schemaVersion:schema的版本信息;
os:所属操作系统;
architecture:CPU架构类型;
media_type:Layer的打包格式;
size:Layer的大小;
location:Layer的位置,标识静态链接文件,用于被Image Config中的rootfs属性所识别;
digest:摘要信息,存储sha256的值。
6.根据权利要求1所述的一种基于容器分层技术的镜像导出与组装方法,其特征在于,所述步骤2具体为:
用户从基础或公用镜像库创建容器实例,并在实例上进行个性化写操作,针对用户的操作,容器进程在Image Layer上创建Container Layer供用户完成操作,并在过程中针对Container Layer进行修改,完成用户Layer的创建。
7.根据权利要求1所述的一种基于容器分层技术的镜像导出与组装方法,其特征在于,所述步骤32在跨集群传输过程中,以增量方式传输,仅传输用户读写的Container Layer,其在目的集群与已经存在的Image Layer进行组装。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111530921.5A CN114327754B (zh) | 2021-12-15 | 2021-12-15 | 一种基于容器分层技术的镜像导出与组装方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111530921.5A CN114327754B (zh) | 2021-12-15 | 2021-12-15 | 一种基于容器分层技术的镜像导出与组装方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114327754A CN114327754A (zh) | 2022-04-12 |
CN114327754B true CN114327754B (zh) | 2022-10-04 |
Family
ID=81051117
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111530921.5A Active CN114327754B (zh) | 2021-12-15 | 2021-12-15 | 一种基于容器分层技术的镜像导出与组装方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114327754B (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111125003A (zh) * | 2019-11-25 | 2020-05-08 | 中科边缘智慧信息科技(苏州)有限公司 | 一种容器镜像轻量化及快速分发方法 |
CN111654531A (zh) * | 2020-05-22 | 2020-09-11 | 国云科技股份有限公司 | 一种基于容器的镜像更新发布方法及装置 |
CN111708656A (zh) * | 2020-04-26 | 2020-09-25 | 中国科学院软件研究所 | 基于懒加载机制的容器镜像拉取方法及系统 |
CN112306621A (zh) * | 2019-07-24 | 2021-02-02 | 中兴通讯股份有限公司 | 容器分层部署方法及系统 |
CN112906907A (zh) * | 2021-03-24 | 2021-06-04 | 成都工业学院 | 一种机器学习管道模型分层化管理和分发的方法及系统 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10261782B2 (en) * | 2015-12-18 | 2019-04-16 | Amazon Technologies, Inc. | Software container registry service |
-
2021
- 2021-12-15 CN CN202111530921.5A patent/CN114327754B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112306621A (zh) * | 2019-07-24 | 2021-02-02 | 中兴通讯股份有限公司 | 容器分层部署方法及系统 |
CN111125003A (zh) * | 2019-11-25 | 2020-05-08 | 中科边缘智慧信息科技(苏州)有限公司 | 一种容器镜像轻量化及快速分发方法 |
CN111708656A (zh) * | 2020-04-26 | 2020-09-25 | 中国科学院软件研究所 | 基于懒加载机制的容器镜像拉取方法及系统 |
CN111654531A (zh) * | 2020-05-22 | 2020-09-11 | 国云科技股份有限公司 | 一种基于容器的镜像更新发布方法及装置 |
CN112906907A (zh) * | 2021-03-24 | 2021-06-04 | 成都工业学院 | 一种机器学习管道模型分层化管理和分发的方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN114327754A (zh) | 2022-04-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100423610C (zh) | 用户识别模块业务及应用的个性化定制发行方法及系统 | |
CN101788892B (zh) | 标签打印系统 | |
US7496890B2 (en) | Generation of configuration instructions using an abstraction technique | |
CN1477522B (zh) | 管理图像文件的方法和系统 | |
CN104216801B (zh) | 一种面向虚拟化环境的数据复制方法及系统 | |
EP3564808B1 (en) | Data configuration method and data configuration apparatus | |
US20150052144A1 (en) | Computer system storing content into application independent objects | |
CN100456264C (zh) | 一种磁盘空间管理方法及系统 | |
CN101145101A (zh) | 版本控制中定制和执行策略的方法、装置和系统 | |
CN107451138A (zh) | 一种分布式文件系统存储方法和系统 | |
CN101488086A (zh) | 一种基于领域模型的软件生成方法及装置 | |
CN106843891B (zh) | 一种基于增量的表单分层扩展方法 | |
CN102097015B (zh) | 一种作业指导书处理系统及方法 | |
CN109726192A (zh) | 基于大数据环境实现主数据模型版本与字段分开管理功能的系统及方法 | |
CN113805853A (zh) | 一种基于工业互联网的软件产品开发系统 | |
US7437708B2 (en) | Enhanced software components | |
CN106685729A (zh) | 服务配置管理方法及系统 | |
CN114327754B (zh) | 一种基于容器分层技术的镜像导出与组装方法 | |
CN109471580A (zh) | 一种可视化3d课件编辑器及课件编辑方法 | |
CN107391507A (zh) | 移动端页面的更新方法和装置 | |
CN111859491A (zh) | Pdm集成cad系统的零件模型工程图生成方法及系统 | |
CN104951482A (zh) | 一种操作Sparse格式的镜像文件的方法及装置 | |
CN110544092B (zh) | 一种区块链的动态新增多类型数据库数据操作上链方法 | |
CN114895875B (zh) | 一种零代码可视化信息系统元数据的生产应用方法及系统 | |
CN102323956B (zh) | 数据管理装置和数据管理方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |