一种windows操作系统下的应用容器系统的制作方法

文档序号:17185252发布日期:2019-03-22 21:17阅读:319来源:国知局
一种windows操作系统下的应用容器系统的制作方法

本申请涉及计算机容器技术领域,尤其涉及一种windows操作系统下的应用容器系统。



背景技术:

容器可以作为虚拟机的一种替代品,它能够帮助开发者构建、迁移、部署和实例化应用。容器是进程的集合,这些进程共享了一个操作系统实例,但是独立于服务器系统中的其他进程。容器并不需要一个完整的操作系统,这个特性使得它们比虚拟机更加轻量。因为容器能够在数秒内启动,因此容器只用分配少量的资源,就能通过扩展来满足应用的需求。

现有的容器方案基本采用docker方案,docker是一种虚拟化技术,是构建在轻量级的虚拟化的手段lxc(linuxcontainer)之上的,是一种基于进程容器(processcontainer)的轻量级虚拟化解决方案。docker是以docker容器为资源分割和调度的基本单位,封装整个软件运行时环境,为开发者和系统管理员设计的,用户构建、发布和运行分布式应用的平台。docker相比其它虚拟化技术来说最明显的特点就是启动快,资源占用小。因此对于构建隔离的标准化的运行环境、轻量级的paas、构建自动化测试和持续集成环境,以及一切可以横向扩展的应用(尤其是需要快速启动、停止来应对峰谷的web应用),docker是一个跨平台、可移植并且简单易用的容器解决方案。

然而,docker通常运行在服务器领域,对于windows操作系统的图形界面的应用程序支持不足且对windows10之前的系统不支持,许多windows操作系统下的应用程序无法正常运行。因此,亟需提出一种windows操作系统下的应用容器系统,用于支持windows操作系统下的应用程序。



技术实现要素:

本申请提供了一种windows操作系统下的应用容器系统,用于解决传统的docker容器无法兼容多版本windows操作系统、以及众多应用程序无法正常运行的技术问题。

本申请提供的一种windows操作系统下的应用容器系统,包括:应用层兼容引擎、内存隔离引擎、文件隔离引擎、注册表隔离引擎和网络隔离引擎;

所述应用层兼容引擎与所述内存隔离引擎、所述文件隔离引擎、所述注册表隔离引擎和所述网络隔离引擎进行数据交互,用于将数据呈现在应用程序上及将进程操作反馈;

所述内存隔离引擎用于将容器中的进程与正常windows进程进行隔离;

所述文件隔离引擎用于调度容器中进程的文件操作,读取文件时直接读取windows文件系统,写入文件时重定位到容器镜像中;

所述注册表隔离引擎用于调度容器中进程的注册表操作,读取注册表时直接读取windows注册表系统,写入注册表时重定位到容器镜像中;

所述网络隔离引擎用于调度容器中进程的网络操作,通过容器ip与windows操作系统ip的映射关系使用windows操作系统ip读取或发送网络数据。

优选地,所述内存隔离引擎包括:

页表管理模块,用于建立容器用于读写内存操作的容器页表,该容器页表包括建立的容器页表项,并将容器页表中的系统页表对应的内存操作标记为只读;

内存写入模块,用于调度容器内进程通过容器页表项进行写入内存操作;

内存读取模块,用于调度容器内进程通过容器页表读取容器内存,通过系统页表读取系统内存。

优选地,所述内存写入模块包括:

容器内存写入单元,用于调度容器内进程通过容器页表项写入容器内存;

系统内存写入单元,用于调度容器内进程写入系统内存的操作;

所述系统内存写入单元具体用于根据写入系统内存时由于只读标记自动触发的系统内存异常中断信号申请内存,并将对应的系统内存数据复制到申请到的内存中,更新页表中对应的条目,使得再次读写该系统内存时根据更新后的条目对申请到的内存进行读写。

优选地,所述文件隔离引擎包括:

文件镜像管理模块,用于建立容器对应的文件镜像,该文件镜像包括建立的目录树和磁盘占用位图;

文件写入模块,用于通过文件镜像写入文件;

文件读取模块,用于通过文件镜像或系统硬盘读取文件。

优选地,所述文件写入模块具体用于:在文件镜像中寻找需要写入文件的信息,若存在,则直接写入,若不存在,则根据需要写入文件的信息更新文件镜像并将需要写入的文件写入文件镜像。

优选地,所述注册表隔离引擎包括:

注册表镜像管理模块,用于建立容器对应的注册表镜像,该注册表镜像包括建立的键值和对应数据;

注册表写入模块,用于通过注册表镜像写入注册表数据;

注册表读取模块,用于通过注册表镜像或系统注册表读取注册表数据。

优选地,所述注册表写入模块具体用于:在注册表镜像中寻找需要写入注册表数据的信息,若存在,则直接写入,若不存在,则根据需要写入注册表数据的信息更新注册表镜像并将需要写入的注册表数据写入注册表镜像。

优选地,所述网络隔离引擎包括:

地址管理模块,用于建立容器对应的ip地址和端口,并建立容器对应的ip地址、端口与系统ip地址、端口的映射关系;

网络输出模块,用于接收容器进程的数据包并将容器对应的ip地址、端口转换为系统ip地址及端口后发送该数据包;

网络接收模块,用于通过系统ip地址、端口接收网络中的数据包并根据容器对应的ip地址、端口与系统ip地址、端口的映射关系通过容器对应的ip地址、端口发送该数据包至容器进程。

优选地,还包括硬件加速模块,

所述硬件加速模块通过cpu硬件虚拟化技术建立虚拟化层,将容器与容器之间、容器与操作系统之间的执行环境进行硬件级别隔离。

优选地,容器引擎初始化时,通过vmx指令集建立虚拟化管理环境;

容器启动时,建立一个新的虚拟化执行环境,容器中的进程执行、调度都通过系统调用vmx指令进入虚拟化执行环境后进行;

容器中的进程时间片结束后,系统通过vmx指令退出虚拟化执行环境;

容器关闭时,删除对应的虚拟化执行环境。

从以上技术方案可以看出,本申请具有以下优点:

本申请提供的一种windows操作系统下的应用容器系统,包括:应用层兼容引擎、内存隔离引擎、文件隔离引擎、注册表隔离引擎和网络隔离引擎;所述应用层兼容引擎与所述内存隔离引擎、所述文件隔离引擎、所述注册表隔离引擎和所述网络隔离引擎进行数据交互,用于将数据呈现在应用程序上及将进程操作反馈;所述内存隔离引擎用于将容器中的进程与正常windows进程进行隔离;所述文件隔离引擎用于调度容器中进程的文件操作,读取文件时直接读取windows文件系统,写入文件时重定位到容器镜像中;所述注册表隔离引擎用于调度容器中进程的注册表操作,读取注册表时直接读取windows注册表系统,写入注册表时重定位到容器镜像中;所述网络隔离引擎用于调度容器中进程的网络操作,通过容器ip与windows操作系统ip的映射关系使用windows操作系统ip读取或发送网络数据。本申请通过应用层兼容引擎、内存隔离引擎、文件隔离引擎、注册表隔离引擎和网络隔离引擎实现了一种能兼容多个windows操作系统的应用容器,支持大部分windows操作系统下的应用程序,解决了传统的docker容器无法兼容多版本windows操作系统、以及众多应用程序无法正常运行的技术问题。

附图说明

为了更清楚地说明本申请实施例,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其它的附图。

图1为本申请提供的一种windows操作系统下的应用容器系统的系统架构图;

图2为本申请提供的一种windows操作系统下的应用容器系统的内存隔离引擎的示意图。

具体实施方式

本申请提供了一种windows操作系统下的应用容器系统,支持windows操作系统下的应用程序,用于解决传统的docker容器无法兼容多版本windows操作系统、以及众多应用程序无法正常运行的技术问题。

为使得本申请的发明目的、特征、优点能够更加的明显和易懂,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,下面所描述的实施例仅仅是本申请一部分实施例,而非全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本申请保护的范围。

请参阅图1,本申请提供的一种windows操作系统下的应用容器系统的一个实施例,包括:应用层兼容引擎、内存隔离引擎、文件隔离引擎、注册表隔离引擎和网络隔离引擎;

应用层兼容引擎与内存隔离引擎、文件隔离引擎、注册表隔离引擎和网络隔离引擎进行数据交互,用于将数据呈现在应用程序上及将进程操作反馈;

内存隔离引擎用于将容器中的进程与正常windows进程进行隔离;

文件隔离引擎用于调度容器中进程的文件操作,读取文件时直接读取windows文件系统,写入文件时重定位到容器镜像中;

注册表隔离引擎用于调度容器中进程的注册表操作,读取注册表时直接读取windows注册表系统,写入注册表时重定位到容器镜像中;

网络隔离引擎用于调度容器中进程的网络操作,通过容器ip与windows操作系统ip的映射关系使用windows操作系统ip读取或发送网络数据。

本申请通过应用层兼容引擎、内存隔离引擎、文件隔离引擎、注册表隔离引擎和网络隔离引擎实现了windows操作系统下的应用容器,支持windows操作系统下的应用程序,解决了传统的docker容器无法兼容多版本windows操作系统、以及众多应用程序无法正常运行的技术问题。

以上是对本申请提供的一种windows操作系统下的应用容器系统的一个实施例进行详细的描述,以下将对本申请提供的一种windows操作系统下的应用容器系统的另一个实施例进行详细的描述。

请参阅图1,本申请提供的一种windows操作系统下的应用容器系统的另一个实施例,包括:应用层兼容引擎、内存隔离引擎、文件隔离引擎、注册表隔离引擎和网络隔离引擎;

应用层兼容引擎与内存隔离引擎、文件隔离引擎、注册表隔离引擎和网络隔离引擎进行数据交互,用于将数据呈现在应用程序上及将进程操作反馈;

需要说明的是,对应用不调用内核层的接口,但又有兼容性问题的部分,通过应用层兼容引擎去完成,即不涉及内存文件注册表网络的部分可以直接通过应用层兼容引擎完成。

内存隔离引擎用于将容器中的进程与正常windows进程进行隔离;

文件隔离引擎用于调度容器中进程的文件操作,读取文件时直接读取windows文件系统,写入文件时重定位到容器镜像中;

注册表隔离引擎用于调度容器中进程的注册表操作,读取注册表时直接读取windows注册表系统,写入注册表时重定位到容器镜像中;

需要说明的是,容器镜像中包括文件镜像、注册表镜像等内容。

网络隔离引擎用于调度容器中进程的网络操作,通过容器ip与windows操作系统ip的映射关系使用windows操作系统ip读取或发送网络数据。

请参阅图2,内存隔离引擎包括:

页表管理模块,用于建立容器用于读写内存操作的容器页表,该容器页表包括建立的容器页表项,并将容器页表中的系统页表对应的内存操作标记为只读;如图2所示,容器1对应的容器页表为正常系统页表和容器1页表项的结合,当容器需要对内存进行操作(读取或写入)时,先从容器页表项中寻找对应的内存,若没有找到再从系统页表中寻找对应的内存。

内存写入模块,用于调度容器内进程通过容器页表项进行写入内存操作;由于通过系统页表只能进行内存读取操作,因此需通过容器页表项进行写入内存操作,但系统页表也在内存写入模块发挥作用;

内存读取模块,用于调度容器内进程通过容器页表读取容器内存,通过系统页表读取系统内存。

内存写入模块包括:

容器内存写入单元,用于调度容器内进程通过容器页表项写入容器内存;

系统内存写入单元,用于调度容器内进程写入系统内存的操作;

系统内存写入单元具体用于根据写入系统内存时由于只读标记自动触发的系统内存异常中断信号申请内存,并将对应的系统内存数据复制到申请到的内存中,更新页表中对应的条目,使得再次读写该系统内存时根据更新后的条目对申请到的内存进行读写。

需要说明的是,页表的作用是为应用使用的内存地址和内存硬件的真实物理地址之间建立映射关系,如0x1-0x1000(应用使用的内存地址)与0x90000001-0x90001000(内存硬件的真实物理地址)两者通过页表建立映射关系。因此,当进行写入系统内存操作时,指令是修改地址0x1-0x1000的内存,就会先从容器页表项寻找对应的内存条目(0x1-0x1000),若找到则直接写入内存(写入至0x1-0x1000所映射的内存物理地址),若没有找到则从系统页表中寻找对应的内存条目,若找到则复制该内存至新申请到的内存同时将该内存对应的条目更新到容器页表项中然后系统自动再次进行写入系统内存操作,举个例子,如需写入应用使用的内存地址为0x1-0x1000的系统内存,首先在容器页表项没有找到条目,然后在系统页表中找到对应系统内存条目(例如找到了0x1-0x1000映射至0x90000001-0x90001000的条目),则需要将0x90000001-0x90001000的系统内存复制至新申请到的内存(例如内存物理地址为0x90001001-0x90002000)同时将该内存对应的条目更新到容器页表项中(在容器页表项中建立0x1-0x1000映射至0x90001001-0x90002000的条目),则再次进行写入系统内存操作(修改地址0x1-0x1000的内存)时,在容器页表项中找到该内存对应的条目(0x1-0x1000映射至0x90001001-0x90002000的条目),从而通过应用容器进行应用使用的内存地址为0x1-0x1000的内存写入操作(实际上是对内存物理地址为0x90001001-0x90002000的内存进行写入操作),并且,当进行内存地址为0x1-0x1000的内存读取时也能在容器页表项中找到该内存对应的条目从而进行读取,而对于windows操作系统本身,由于不会用到容器页表项,仅会用到正常系统页表和对应的内存,与容器使用的容器页表项和内存进行了隔离,因此实现了内存上的隔离(即系统运行访问地址0x1-0x1000的内存时,会在系统页表上找到条目从而对内存物理地址为0x90000001-0x90001000的内存进行访问,而容器访问地址0x1-0x1000的内存时,则会先在容器页表项上找到条目从而对内存物理地址为0x90001001-0x90002000的内存进行访问,实现了windows操作系统与容器的内存完全隔离)。当在容器页表项和系统页表都找不到对应的内存条目时,则无法写入内存,将触发操作系统本身的异常处理流程。

可以理解的是,内存相当于书的一页页内容,页表就是书页的目录(索引),页表中的条目是目录中标题与页数的映射关系(比如总结在第101页),有一页书需要修改,为了保证系统的不受影响,则新申请一页,把原来页的内容复制到新的页,在新页上做修改,同时新建一个书的目录(即容器页表项,比如修改成总结在第201页),这样访问总结的时候就是到201页进行访问,而系统还是原来的(因为用的系统的页表,不是新的目录,总结还是在101页)。

若容器进程需要新建内存空间,则可以直接申请内存,同时在容器页表项中建立映射关系即可。

该内存隔离引擎的实现方式为:

在容器启动时,在正常windows页表目录中,对每个容器建立独立的页表项,将其与正常的系统页表合并形成新的页表,并将系统页表标记为只读;

容器中的进程启动时,在初始化时将进程状态寄存器cr3由正常操作系统页表修改为对应的容器页表;

容器内进程执行过程中,对系统的正常访问,因为页表n中包含系统页表,可以正常进行;

容器内进程访问自身的内存,由页表提供,也可以正常进行,但是容器n外的进程(操作系统或者其他容器进程)访问,由于无法找到对应的页表项,无法进行访问。

容器内进程写如系统内存时,由于前面进行标记为只读,将自动触发系统内存异常中断流程,此时申请新的内存,将原来的系统内存数据复制到新申请内存,更新页表中对应的条目,退出异常处理流程,系统自动重新尝试写入数据,这时将写入到新申请的内存。实现了对操作系统的数据的保护和隔离。

文件隔离引擎包括:

文件镜像管理模块,用于建立容器对应的文件镜像,该文件镜像包括建立的目录树和磁盘占用位图;根据实际需要,文件镜像还可以包括其他内容,此处不再赘述;

文件写入模块,用于通过文件镜像写入文件;

文件读取模块,用于通过文件镜像或系统硬盘读取文件。

文件写入模块具体用于:在文件镜像中寻找需要写入文件的信息,若存在,则直接写入,若不存在,则根据需要写入文件的信息更新文件镜像并将需要写入的文件写入文件镜像。

例如,需要写入更新桌面的a文件,第一次在文件镜像中找不到(因为a文件是系统磁盘的文件),则将a文件复制更新到文件镜像中,同时在目录树等写入a文件的信息(使得能够在文件镜像中找到a文件),然后更新a文件镜像中,则再次访问a文件时可以实现在文件镜像中找到并顺利访问。

又例如,需要新建b文件到桌面,则直接在文件镜像中建立b文件的信息和b文件的文件数据,使得下一次能够在文件镜像中找到b文件。

注册表隔离引擎包括:

注册表镜像管理模块,用于建立容器对应的注册表镜像,该注册表镜像包括建立的键值和对应数据;

注册表写入模块,用于通过注册表镜像写入注册表数据;

注册表读取模块,用于通过注册表镜像或系统注册表读取注册表数据。

注册表写入模块具体用于:在注册表镜像中寻找需要写入注册表数据的信息,若存在,则直接写入,若不存在,则根据需要写入注册表数据的信息更新注册表镜像并将需要写入的注册表数据写入注册表镜像。

文件隔离引擎和注册表隔离引擎的实现方式为:

容器初始化时,在容器镜像中初始化文件系统结构:目录树、磁盘占用位图,注册表结构:键值及对应数据。此时内容均为空数据;

容器引擎加载时,会建立磁盘过滤驱动,将其附加到系统盘上;建立注册表访问钩子函数。需要说明的是,磁盘过滤驱动是文件隔离引擎的一种实现,进行磁盘读取或写入操作时,要通过磁盘过滤驱动进行,注册表访问钩子函数是注册表隔离引擎的一种实现;进行注册表读取或写入操作时,要通过注册表访问钩子函数。

容器中进程访问文件时,首先尝试对应镜像中文件信息,若存在,直接读取返回;

若不存在,尝试读取系统硬盘的文件数据。这样保证容器访问文件与普通windows进程没有区别。

容器中进程写入文件时,首先尝试对应镜像中文件信息,若存在,直接写入返回;若不存在,更新容器镜像中的文件磁盘信息,写入到镜像文件中。这样以后访问修改过的数据,无论是系统的还是镜像的,都能正常访问。并且对原有系统无任何印象。

容器中进程读取、修改注册表数据逻辑与文件系统类似,即将读取请求先尝试容器镜像中结构;对系统信息写入请求重定位到镜像文件中。

网络隔离引擎包括:

地址管理模块,用于建立容器对应的ip地址和端口,并建立容器对应的ip地址、端口与系统ip地址、端口的映射关系;

网络输出模块,用于接收容器进程的数据包并将容器对应的ip地址、端口转换为系统ip地址及端口后发送该数据包;

网络接收模块,用于通过系统ip地址、端口接收网络中的数据包并根据容器对应的ip地址、端口与系统ip地址、端口的映射关系通过容器对应的ip地址、端口发送该数据包至容器进程。

网络隔离引擎实现方式为:

容器引擎启动时,建立网络设备对象(tcp、udp、raw等)的过滤驱动和网卡过滤驱动,容器启动时,容器引擎每个容器分配单独的私有ip地址,如在172.16.0.0/16,10.0.0.0/8,192.168.0.0/16等私有ip段分配。

容器中进程访问网络时,过滤驱动进行地址转换,将容器私有ip地址、端口转换为系统ip和系统未使用的端口,建立映射关系,然后通过系统ip发送数据包。

网络中数据包到达系统时,过滤驱动进行地址转换,将系统ip、端口转换为容器ip和端口,然后通过容器ip投递数据包到对应的容器进程。

进一步地,容器可以分配系统相同网段的地址进行桥接,将容器虚拟成网络中的独立地址。

进一步地,可以通过控制容器中进程网络通信允许的ip、端口范围,实现容器内部的防火墙,控制其网络行为,实现与操作系统的隔离。

该应用容器系统还包括硬件加速模块,硬件加速模块通过cpu硬件虚拟化技术建立虚拟化层,将容器与容器之间、容器与操作系统之间的执行环境进行硬件级别隔离。

cpu硬件虚拟化技术可以是intelvt-x、v-amd等技术。

容器引擎初始化时,通过vmx指令集建立虚拟化管理环境;

容器启动时,建立一个新的虚拟化执行环境,容器中的进程执行、调度都通过系统调用vmx指令进入虚拟化执行环境后进行;

容器中的进程时间片结束后,系统通过vmx指令退出虚拟化执行环境;

容器关闭时,删除对应的虚拟化执行环境。

通过本申请的应用容器系统,可以在非服务器环境使用的容器化技术,支持windowsxp及以上系统,并且可以同时运行同一个软件的不同版本,并且在运行完毕后直接从系统上抹除。本申请实现了在任意的windows平台上跨系统版本的使用应用程序可以被封装成镜像,以容器的形式运行。

本申请实现了windows下能够利用镜像快速部署运行服务,能够实现业务的快速交付,缩短业务的上线周期,极大地方便运维人员的上线部署工作;可以利用容器将服务移植到不同的操作系统版本环境下运行;相比传统虚拟机,容器更加轻量,资源消耗更低,镜像体积更小;较传统虚拟化有更低资源使用粒度,在一台物理机上可运行上百个容器服务,从而提高硬件资源的利用率。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。

以上所述,以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1