主机的容器系统、动态挂载主机数据至容器的方法及应用程序与流程

未命名 07-23 阅读:79 评论:0


1.本发明涉及容器,尤其涉及在主机中使用的容器系统、可动态将主机数据挂载至容器的挂载方法,以及对应的应用程序。


背景技术:

2.容器(container)是一种将作业系统虚拟化的技术。一台主机(host)中可视需求建立多个容器,各个容器可分别用于执行小型服务、小型程序乃至于大型应用程序等任何作业。具体地,一个容器中包含了执行应用程序所需的程序档(process)、程序库(library)与组态档(config)等,但不需包含作业系统映像,因此相当轻巧,也容易被携带。
3.容器技术的最大特点就是可以把应用程序的执行环境封装(isolated)起来,使容器内的应用程序的执行不会影响到容器外的环境。举例来说,若多个应用程序需要分别使用不同版本的程序库,则使用者可以让这些应用程序分别执行在不同的容器中,藉此克服这些应用程序所需的程序库版本不同而造成互相冲突的问题。
4.于常见情况下,容器被建立后的执行期间很短,并且在任务达成(例如一个指定的程序执行完毕)后就会被关闭。于此情况下,容器的相关资讯不会被储存下来,故又称为无状态(stateless)的容器。部分容器内所执行的程序较为特殊(例如nfs-ganesha、samba等用于连接不同通讯协定的软件),因此执行期间较长,且不常被关闭。于此情况下,容器的相关资讯需要被保存,故又称为有状态(stateful)的容器。
5.上述有状态的容器中的应用程序可在架构上区分为控制路径(control path)与数据路径(data path),其中控制路径用以提供应用程序界面(application program interface,api)给外部的管理者来对应用程序进行配置(例如通过网络来连接),而数据路径则用以依据从控制路径获得的指令来分享对应的数据。由于控制路径提供了容器向外连接的途径,因此较容易成为骇客攻击的主要来源。
6.虽然容器可将应用程序的执行环境封装起来,以与外部环境隔离,但应用程序的执行仍需使用主机中的数据。然而,在建立容器时,系统并无法事先预测应用程序需要什么数据。若管理者为了便利,直接将主机中的所有储存空间(storage)皆挂载给容器,或是不当地开放可以自由查询并挂载主机中的任意储存空间的特权(privilege)给容器,则当骇客经由所述控制路径侵入容器后,即可反向获得主机内的档案系统(file system,fs)的所有数据。如此一来,即违反了容器最原始要将执行环境与外部环境隔离的本意,并且增加了资安风险。
7.参阅图1,为于主机中的容器使用示意图。如图1所示,主机1中主要可具备由多个目录(directories)组成的档案系统11,并且可运用至少一容器12,其中容器12内运行至少一个应用程序。于图1中,所述应用程序于架构上区分为应用程序界面服务器(api server)13与应用行程(daemon)14,其中应用程序界面服务器13对外提供控制路径r1,应用行程14提供数据路径r2。
8.如前文所述,由于无法预测应用程序执行时需要使用主机1中的什么数据,因此部分管理者可能会为了便利,直接将整个档案系统11皆绑定挂载(bind mount)给容器12中的分享目录15。于此情况下,若骇客经由控制路径r1入侵容器12,就可以直接经由分享目录15来获得主机1内的所有数据。
9.另一方面,部分管理者亦可能为了便利,直接于建立容器12时开放不恰当的特权给容器12。于此情况下,若骇客经由控制路径r1入侵容器12,即可通过特定指令(例如docker下的cli指令)来查询并获取主机1的所有数据。一旦上述情况发生,将使得容器12的隔离机制形同虚设。


技术实现要素:

10.本发明的主要目的,在于提供一种主机的容器系统、动态挂载主机数据至容器的方法及应用程序,可于容器有需要时才将主机中的特定数据动态挂载给容器,降低主机内部的数据曝露在外的风险。
11.为了达成上述目的,本发明的容器系统包括:
12.一主机(host),具有由多个目录(directories)组成的一档案系统(file system,fs);
13.一应用行程(daemon),运行于该主机的一容器(container),并具有至少一分享目录(shared directory);
14.一容器管理站,运行于该主机,于该档案系统中建立一来源目录,并且该来源目录挂载至该分享目录;及
15.一应用程序界面服务器(api server),接收一外部管理者对于该档案系统中的一目标子目录的一请求指令,并将该请求指令转送至该容器管理站;
16.其中,该容器管理站依据该请求指令将该目标子目录绑定挂载(bind mount)至该来源目录的一来源子目录,并告知该应用程序界面服务器该目标子目录于该分享目录中的位置,藉此该容器通过该分享目录分享该目标子目录供内部运算或分享给外部用户。
17.如上所述,其中该来源目录以从属挂载(slave mount)的方式挂载至该分享目录,该目标子目录被绑定挂载至该来源子目录后,通过从属挂载的特性自动出现于该分享目录的一分享子目录,其中该容器分享该分享子目录供内部运算或分享给外部用户。
18.如上所述,其中该应用程序界面服务器与该应用行程运行于该主机的不同容器。
19.如上所述,其中该应用程序界面服务器通过一第一行程间通讯(inter-process communication,ipc)与该应用行程进行本地端沟通,并且通过一第二行程间通讯转传该请求指令给该容器管理站并接收该容器管理站的告知。
20.如上所述,其中更包括一绑定数据库,储存该容器的一组态档,该组态档包括该分享目录于该容器中的一路径名称(path name)、该来源目录与该分享目录的一挂载关系、以及该目标子目录与该来源子目录的一绑定挂载关系的至少其中之一。
21.如上所述,其中容器管理站查询该绑定数据库以取得该组态档,依据该组态档建立该容器,并于该容器中运行该应用行程。
22.为了达成上述目的,本发明的方法应用于具有一档案系统的一主机,其中该主机运行一应用行程、一应用程序界面服务器及一容器管理站,该应用程序界面服务器运行于
一第一容器,该应用行程运行于一第二容器,并且该方法包括:
23.a1)该容器管理站于该档案系统中建立一来源目录;
24.a2)该容器管理站将该来源目录挂载至该应用行程的一分享目录;
25.a)该容器管理站由该应用程序界面服务器接收一请求指令,其中该请求指令为一外部管理者针对该档案系统中的一目标子目录所发出;
26.b)该容器管理站依据该请求指令将该目标子目录绑定挂载至该来源目录的一来源子目录;及
27.c)该步骤b)后,该容器管理站告知该应用程序界面服务器该目标子目录于该分享目录中的位置,以令该第二容器通过该分享目录分享该目标子目录供内部运算或分享给外部用户。
28.如上所述,其中该步骤a01)通过从属挂载的方式将该来源目录挂载至该分享目录,并且该步骤b)后,该目标子目录通过从属挂载的特性自动出现于该分享目录的一分享子目录,该步骤c)由该第二容器分享该分享子目录供内部运算或分享给外部用户。
29.如上所述,其中该应用程序界面服务器于该步骤a)中通过一第一ipc转传该请求指令给该容器管理站,并且于该步骤c)中通过该ipc接收该容器管理站的告知,并通过一第二ipc要求该应用行程分享该分享子目录。
30.如上所述,其中该步骤a)之前更包括下列步骤:
31.a01)于一绑定数据库中查询该第二容器的一组态档,其中该组态档包括该分享目录于该第二容器中的一路径名称、该来源目录与该分享目录的一挂载关系、以及该目标子目录与该来源子目录的一绑定挂载关系的至少其中之一;
32.a02)于该绑定数据库中存在该组态档时,依据该组态档的内容将已被允许分享的该目标子目录绑定挂载至该来源子目录;及
33.a03)该步骤a02)后,基于该来源目录与该分享目录的该挂载关系建立该第二容器,并于该第二容器中运行该应用行程。
34.如上所述,其中该步骤a)之前更包括下列步骤:
35.a04)于该绑定数据库中不存在该组态档时,确定要建立的该分享目录到该第二容器的一命名空间(namespace);
36.a05)将该分享目录的一路径名称(path name)储存至该绑定数据库做为该组态档;及
37.a06)基于该来源目录与该分享目录的该挂载关系建立该第二容器,并于该第二容器中运行该应用行程。
38.如上所述,其中该步骤a)之前更包括一步骤a07):该容器管理站于该步骤a03)或该步骤a06后建立该第一容器,并于该第一容器中运行该应用程序界面服务器。
39.如上所述,其中该步骤a)之前更包括下列步骤:
40.a08)该容器管理站由该应用程序界面服务器接收一查询请求,其中该查询请求为该外部管理者针对该主机的一可分享目录所发出;及
41.a09)该容器管理站依据该查询请求回复该可分享目录的一清单给该应用程序界面服务器,藉此提供给该外部管理者,其中该目标子目录记录于该清单中。
42.如上所述,其中更包括下列步骤:
43.d)该容器管理站由该应用程序界面服务器接收一停止分享请求,其中该停止分享请求为该外部管理者针对该目标子目录所发出;
44.e)该容器管理站告知该应用程序界面服务器该目标子目录于该分享目录中的位置,藉此该应用程序界面服务器请求该应用行程停止分享该目标子目录;
45.f)该容器管理站卸载该目标子目录并移除该来源子目录;及
46.g)将卸载动作记录于一绑定数据库。
47.本发明相对于相关技术所能达到的技术功效在于,容器管理站可于容器运行中,动态地将主机中的特定数据提供给容器,通过降低容器一般可存取的数据量以避免主机的数据曝露于外。并且,容器管理站不需要先关闭容器并修改组态档后再重建容器,如此可同时兼顾安全性及便利性。
48.以下结合附图和具体实施例对本发明进行详细描述,但不作为对本发明的限定。
附图说明
49.图1为于主机中的容器使用示意图;
50.图2为本发明的容器系统的示意图的第一具体实施例;
51.图3为本发明的容器系统的示意图的第二具体实施例;
52.图4为本发明的容器系统的示意图的第三具体实施例;
53.图5为本发明的动态挂载方法的流程图的第一具体实施例;
54.图6为本发明的容器建立流程图的第一具体实施例;
55.图7为本发明的动态挂载方法的时序图的第一具体实施例;
56.图8为本发明的卸载方法的流程图的第一具体实施例;
57.图9为本发明的卸载方法的时序图的第一具体实施例。
58.其中,附图标记:
[0059]1…
主机;
[0060]
11

档案系统;
[0061]
111

目标子目录;
[0062]
12

容器;
[0063]
13

应用程序界面服务器;
[0064]
14

应用行程;
[0065]
15

分享目录;
[0066]
r1

控制路径;
[0067]
r2

数据路径;
[0068]2…
主机;
[0069]
21

档案系统;
[0070]
211

来源目录;
[0071]
2111

来源子目录;
[0072]
212

目标子目录;
[0073]
22

容器;
[0074]
23

第一容器;
[0075]
24

第二容器;
[0076]3…
容器管理站;
[0077]4…
绑定数据库;
[0078]5…
应用程序界面服务器;
[0079]6…
应用行程;
[0080]7…
分享目录;
[0081]
71

分享子目录;
[0082]
8、81

行程间通讯;
[0083]9…
管理者;
[0084]
s10~s22

挂载步骤;
[0085]
s30~s42

建立步骤;
[0086]
s51~s66

挂载步骤;
[0087]
s70~s78

卸载步骤;
[0088]
s91~s96

卸载步骤。
具体实施方式
[0089]
下面结合附图和具体实施例对本发明技术方案进行详细的描述,以更进一步了解本发明的目的、方案及功效,但并非作为本发明所附权利要求保护范围的限制。
[0090]
首请参阅图2,为本发明的容器系统的示意图的第一具体实施例。如图2所示,本发明揭露了一种主机的容器系统,主要包括主机2,以及运行于主机2中的容器管理站3、应用程序界面服务器(application program interface server,api server)5及应用行程(daemon)6。所述主机2可例如为个人电脑(personal computer,pc)、笔记型电脑、工业电脑(industrial pc,ipc)、服务器等电脑设备,但不加以限定。于一实施例中,所述容器管理站3为主机2内部的一项服务并直接运行于主机2上,所述应用程序界面服务器5与应用行程6运行于主机2中的至少一个容器22。
[0091]
所述容器22为本技术领域中的常用技术手段,于此不再赘述。
[0092]
具体地,应用程序界面服务器5与应用行程6可为相同应用程序的不同功能,并且于架构上区分为应用程序界面服务器5与应用行程6。当主机2要执行此应用程序时,先通过容器管理站3来建立容器22,并且再于容器22中运行此应用程序。藉此,将此应用程序(即,应用程序界面服务器5与应用行程6)的执行环境与容器22外的环境隔离,而不会彼此影响。
[0093]
于一实施例中,应用程序界面服务器5用以对外(例如通过网际网络)提供控制路径(control path),应用行程6用以提供数据路径(data path),其中数据路径可为对外提供或对内提供,不加以限定。管理者(admin)可通过所述控制路径发送指令至应用程序界面服务器5,以控制容器22内的作动并查询所需的数据。并且,管理者可通过所述数据路径来获取应用行程6所分享的相关数据。
[0094]
于一实施例中,所述应用行程6为一种用来连接不同通讯协定(例如服务器讯息区块(server message block,smb)协定与网络文件共享系统(common internet file system,cifs)协定)的软件,例如为nfs-ganesha或samba等,但不加以限定。所述nfs-ganesha与samba为本技术领域的公知技术,于此不再赘述。
[0095]
主机2内部具有由多个目录(directories)组成的档案系统(file system,fs)21。如图2所示,所述档案系统2为一树状结构,并且于根目录(/)下包含了etc、home、mnt等目录,mnt目录进一步包含了a、b、

、z等子目录。上述目录与子目录的目录名称仅为示例,并非用以限定本案的主要技术范围。
[0096]
如图2所示,容器22中的应用行程6可具有自己的分享目录7,例如图2中所示的share目录。当管理者通过数据路径来从应用行程6获取数据时,主要仅能获取分享目录7下的数据。更具体地,所述share目录的目录名称为应用行程6一般分享数据时的固定用法,用以表示此目录为可分享目录(share-able directory)。
[0097]
本发明的其中一个技术特征在于,容器系统于建立容器22时仅令分享目录7挂载(mount)极少量的内容(于图2的实施例中,分享目录7下没有挂载任何数据),并且于应用行程6有分享需求时,再由容器管理站3从档案系统21中动态挂载所需的数据至分享目录7下。藉此,可以避免因为所述控制路径被骇客入侵,导致主机2的档案系统21中的重要数据经由分享目录7而外泄的风险。
[0098]
具体地,本发明的容器管理站3可以在建立(instantiate)容器22前,先于主机2的档案系统21中建立一个来源目录211。所述来源目录211于图2中以c2的目录名称为例,惟来源目录211的目录名称并不具实质意义,可由管理者自行设定来源目录211的目录名称,或由容器管理站3随机产生一个任意的目录名称,不加以限定。
[0099]
当容器22被建立后,容器管理站3将主机2的档案系统21中的来源目录211挂载至容器22中的分享目录7(即,将”/c2”目录挂载至”/share”目录)。于一实施例中,容器管理站3主要是以从属挂载(slave mount)的方式将来源目录211挂载至分享目录7。通过从属挂载技术的特性,当档案系统21中的一个子目录被绑定挂载(bind mount)至来源目录211下的一个来源子目录时,所述绑定挂载关系会自动出现在分享目录7。藉此,所述子目录会在被绑定挂载至来源目录211下的来源子目录时,自动出现在分享目录7下的一个分享子目录(容后详述)。
[0100]
如图2所示,应用程序界面服务器5可通过控制路径接收外部的管理者的请求指令。于一实施例中,所述请求指令可例如为管理者针对档案系统21中特定的一个目标子目录所发出。本发明中,应用程序界面服务器5不直接执行此请求指令,而会将此请求指令转传(forward)至容器管理站3。
[0101]
于一实施例中,容器管理站3通过行程间通讯(inter-process communication,ipc)8与应用程序界面服务器5沟通,因此,应用程序界面5可通过行程间通讯8转传所述请求指令给容器管理站3。
[0102]
具体地,系统可以在布署所述行程间通讯8时设定其使用本地端的通讯协定,藉此限制容器管理站3只能通过行程间通讯8接受并服务来自本地端信任域(local trust domain)的请求。通过行程间通讯8的使用,即使应用程序界面服务器5被骇客入侵,亦可避免骇客经由容器管理站3来取得主机2的数据的风险。
[0103]
如上所述,本发明由容器管理站3来将来源目录211挂载至分享目录7,并且由容器管理站3来通过指令查询档案系统21的内容。为了实现上述作业,主机2必须要赋予容器管理站3一定程度的特权(privilege)。为了降低容器管理站3被骇客入侵而经由所述特权危害主机2的风险,容器管理站3只能经由所述行程间通讯8来与其他程序进行沟通。
[0104]
值得一提的是,虽然行程间通讯8可降低骇客经由应用程序界面服务器5而入侵容器管理站3的风险,然而若将应用程序界面服务器5与应用行程6运行于同一个容器22中,则骇客仍有可能经由应用程序界面服务器5而入侵应用行程6。
[0105]
具体地,若将所述控制路径与数据路径放置在同一个容器22中,则由于数据路径要分享出去的数据,从控制路径都看得到,而由于控制路径一般可连接网际网络,因此常常为骇客攻击的主要来源。于此情况下,若档案系统21中的任一个目录/子目录被挂载至分享目录7,骇客就有可能经由分享目录7来获取主机2的档案系统21内的其他数据。有鉴于此,本发明提供另一技术方案,令应用程序界面服务器5与应用行程6分别运行于不同的容器22中,以降低上述风险。
[0106]
请参阅图3,为本发明的容器系统的示意图的第二具体实施例。图3揭露了本发明的容器系统的另一个具体实施范例。图3的实施例与图2的实施例间的差异在于,容器管理站3运行第一容器23并于第一容器23中运行应用程序界面服务器5,并且运行第二容器24并于第二容器24中运行应用行程6。
[0107]
如图3所示,第一容器23中的应用程序界面服务器5除了通过所述行程间通讯8与容器管理站3沟通外,还通过另一行程间通讯81与第二容器24中的应用行程6沟通。通过行程间通讯8、81仅接受并服务本地端信任域的特性,并且令应用程序界面服务器5仅挂载极少量的主机数据(图中未示),图3的实施例可以进一步降低主机2的数据经由应用程序界面服务器5而曝露在外的风险。
[0108]
值得一提的是,应用程序界面服务器5与容器管理站3间使用的行程间通讯8(例如可称为第一行程间通讯)和应用程序界面服务器5与应用行程6间使用的行程间通讯81(例如可称为第二行程间通讯)是各自独立的,并且可以分别采用不同的local ipc机制来实现,但并不加以限定。
[0109]
具体地,容器管理站3只需要实做一种行程间通讯8,就可以支援多种不同的应用程序服务器5(例如,samba、nfs等各自具有自己的应用程序服务器)。相较之下,应用程序服务器5与应用行程6间的行程间通讯81可依据软件的本质与实际需求而采用不同的实作方式。例如,samba的应用程序服务器5与应用行程6间采用的行程间通讯81,不一定需要与nfs的应用程序服务器5与应用程序6间采用的行程间通讯81一样。更具体地,所述行程间通讯8、81可以用不同的通讯协定来实作;即使是用一样的通讯协定,但所支援的通讯指令仍然可以是不一样的,看应用程序服务器5与应用行程6之间需要沟通的内容而定。
[0110]
惟,上述仅为本发明的部分具体实施范例,但并不以此为限。
[0111]
请同时参阅图4,为本发明的容器系统的示意图的第三具体实施例。如前文中所述,当容器管理站3从应用程序界面服务器5接收所述请求指令后,可以从档案系统21中查询请求指令所指定的目标子目录212的位置(图4中的目标子目录212以/mnt/a子目录为例)。并且,容器管理站3将目标子目录212绑定挂载(bind mount)至来源目录211的来源子目录2111(图4中的来源子目录2111以/c2/a子目录为例)。
[0112]
如图4所示,容器管理站3在建立第二容器24时,是直接将来源目录211从属挂载至应用行程6下的分享目录7。基于从属挂载技术的特性,当所述目标子目录212被绑定挂载至来源子目录2111后,所述绑定挂载关系会自动出现在第二容器24的分享目录7,进而所述目标子目录212会自动出现在第二容器24中的分享目录7下的分享子目录71(图4中以/share/
a子目录为例)。
[0113]
如上所述,在将目标子目录212绑定挂载至来源子目录2111后,与来源目录211具有从属挂载关系的分享目录7下会自动出现相对应的分享子目录71。据此,容器管理站3可以告知应用程序界面服务器5所述目标子目录212于分享目录7中的位置。更具体地,容器管理站3可告知应用程序界面服务器5所述目标子目录212相同于第二容器24中的分享子目录71。如此一来,应用程序界面服务器5可以要求应用行程6将分享子目录71进行分享,而第二容器24可以通过分享目录7来分享被指定的目标子目录212的内容(即,分享子目录71的内容)以供内部运算,或是分享给外部用户。
[0114]
于一实施例中,应用程序界面服务器5主要是通过行程间通讯8来接收容器管理站3的告知,并且通过行程间通讯81与应用行程6进行本地端沟通,以要求应用行程6分享所述分享子目录71的内容。如此一来,可以降低骇客入侵应用程序界面服务器5后,进一步经由应用程序界面服务器5取得分享子目录71的内容,仍至于取得主机2的整个档案系统21的风险。
[0115]
值得一提的是,一个丛集可以同时运行多台主机(即,多个节点(nodes)),各个节点可分别运行多个容器。本发明中,若一个丛集上运行了多个节点,则每一个节点需要分别运行一个容器管理站3,以对此节点中的一或多个容器进行管理。
[0116]
续请参阅图5,为本发明的动态挂载方法的流程图的第一具体实施例。本发明进一步揭露了一种动态挂载主机数据至容器的方法(下面将于说明书中简称为挂载方法),所述挂载方法主要应用于如图2、图3及图4所示的容器系统中,以在通过应用行程6分享数据的同时,降低主机2的数据外泄的风险。
[0117]
值得一提的是,所述容器管理站3主要为主机2中运行的一个应用程序,并且为主机2提供特定服务。举例来说,主机2可例如为网络储存服务器(network attached storage,nas),而容器管理站3可为用来提供网络存取服务的应用程序,并且通过容器的技术来于主机2上实现所述应用程序界面服务器5与应用行程6。惟,上述仅为本发明的其中一种实施态样,但并不以上述者为限。
[0118]
所述应用程序中可记录有电脑可执行程序码,当一电子装置,例如图2至图4所示的主机2执行了电脑可执行程序码后,即可于其上运行所述容器管理站3,并且通过容器管理站3来实现图5所示的挂载方法的各个具体步骤。
[0119]
如图5所示,要执行本发明的挂载方法,首先由主机2执行所述应用程序,以在主机2中运行容器管理站3。接着,由容器管理站3于主机2的档案系统21中建立一个来源目录211(步骤s10)。具体地,建立来源目录211的目的在于,在不影响档案系统21中其他目录的情况下,将特定的子目录挂载至容器中。因此,于步骤s10中,容器管理站3可以随机产生来源目录211的目录名称,并且可随机决定来源目录211在档案系统21中的位置,藉此增加执行弹性。
[0120]
步骤s10后,容器管理站3即可将来源目录211挂载至应用行程6(即,如图4所示的第二容器24)的分享目录7(步骤s12)。于一实施例中,容器管理站3于步骤s12中是通过从属挂载的方式将来源目录211挂载至应用行程6的分享目录7,并且所述应用行程6可例如为samba。惟,上述仅为本发明的其中一种实施范例,但不以此为限。
[0121]
如图4所示,本发明的容器系统还可于主机2中设置以硬体实现或以软件实现的绑
定数据库(binding database)4。于上述步骤s10后,容器管理站3主要可将来源目录211的相关资讯写入将要建立的容器(例如图4所示的第一容器23与第二容器24)的组态档(config),并且记录于绑定数据库4中。并且,容器管理站3将来源目录211与即将建立的第二容器24的分享目录7的挂载关系一同写入所述组态档中。
[0122]
于步骤s12中,容器管理站3从绑定数据库4中读取所述组态档,并且依据组态档的内容来建立对应的第二容器24。藉此,当容器管理站3建立第二容器24后,即可直接于第二容器24中运行应用行程6,并且令应用行程6具备一个已与来源目录211建立了挂载关系的分享目录7。换句话说,容器管理站3可以先建立第二容器24,再建立来源目录211与分享目录7间的挂载关系;或者,容器管理站3亦可先建立来源目录211与分享目录7间的挂载关系并储存为组态档,接着再依据组态档来建立第二容器24。
[0123]
于建立第二容器24时,容器管理站3虽然将来源目录211挂载至分享目录7,但容器管理站3不必然挂载额外的子目录给第二容器24(例如图3所示,来源目录211与分享目录7下皆不具有任何数据)。此时,若第一容器23中的应用程序界面服务器23接收外部管理者所发出的请求指令,则会经由所述ipc8将此请求指令转传至容器管理站3,即,容器管理站3会由应用程序界面服务器23接收到外部发送的请求指令(步骤s14)。
[0124]
于接收到所述请求指令后,容器管理站3可对请求指令的内容进行解析。例如,当外部管理者想要查询、撷取或使用档案系统21中的一个目标子目录212(例如图4所示的/mnt/a子目录)时,即可针对此目标子目录212来发出对应的请求指令至应用程序界面服务器23。容器管理站3在接收并解析了请求指令后,即可通过内部指令(例如cli指令)的执行,于档案系统21中寻找目标子目录212(步骤s16)。
[0125]
于找到目标子目录212的位置后,容器管理站3进一步将目标子目录212绑定挂载(bind mount)至来源目录211下的来源子目录2111(例如图4所示的/c2/a子目录)(步骤s18)。所述绑定挂载的技术为本技术领域的常用技术手段,于此不再赘述。
[0126]
如前文所述,容器管理站3主要是通过从属挂载技术来将来源目录211挂载至第二容器24的分享目录7。基于从属挂载技术的特性,当所述目标子目录212被绑定挂载至来源子目录2111后,所述绑定挂载关系会自动出现在分享目录7,因而所述目标子目录212会自动自现在分享目录7下的分享子目录71(例如图4所示的/share/a子目录)。因此,于步骤s18后,容器管理站3可以告知应用程序界面服务器5所述目标子目录212于分享目录7中的位置(步骤s20)。
[0127]
具体地,于上述步骤s14中,容器管理站3主要可从应用程序界面服务器5接收将目标子目录212挂载至第二容器24的请求。于步骤s20中,容器管理站3主要可告知应用程序界面服务器5所述目标子目录212就是第二容器24中的分享子目录71。
[0128]
于步骤s20后,应用程序界面服务器5通过所述ipc81对应用行程6发出分享请求,以令第二容器24通过分享目录7来分享所述目标子目录212(即,分享子目录71)供主机2内部运算,或是分享给外部用户(步骤s22)。
[0129]
如前文所述,容器管理站3可先于绑定数据库4中读取要建立的容器的组态档,再依据组态档的内容建立对应的容器。若绑定数据库4中存在容器的组态档,代表这个容器之前已经建立过,后来被关闭(或是主机2曾经重新启动(reboot));若绑定数据库4中不存在容器的组态档,代表这个容器是第一次被建立。因此,所需的容器是否曾经被建立,将会影
响容器管理站3的建立作业。
[0130]
请同时参阅图6,为本发明的容器建立流程图的第一具体实施例。如前文所述,本发明的挂载方法主要是将主机2的档案系统21中的来源目录211从属挂载至第二容器24的分享目录7,因此在执行挂载方法前,容器管理站3需先建立所述来源目录211以及所述第二容器24。
[0131]
本实施例中,容器管理站3首先随机产生一个目录名称(例如图4中所示的“c2”),并且基于此目录名称于档案系统21的任意位置建立所述来源目录211(步骤s30)。接着,容器管理站3于绑定数据库4中查询即将建立的第二容器24的组态档(步骤s32),并且判断绑定数据库4中是否存在即将建立的第二容器24的组态档(步骤s34)。
[0132]
于一实施例中,所述组态档为容器管理站4前一次建立第二容器24时记录于绑定数据库4中的数据,并且可例如包括分享目录7于第二容器24的路径名称(path name)、来源目录211与分享目录7的挂载关系、以及目标子目录212与来源子目录2111的绑定挂载关系的至少其中之一。
[0133]
如前文所述,绑定数据库4中可能存在所述组态档(即,第二容器24曾被建立过后来被关闭),亦可能不存在所述组态档(即,第二容器24未被建立过)。若容器管理站3于步骤s34中判断绑定数据库4中存在所述组态档,则容器管理站3依据组态档的内容将已被分享的目标子目录212绑定挂载至来源子目录2111(步骤s36)。于步骤s34后,容器管理站3再依据组态档的内容建立第二容器7以及运行所述应用行程6(步骤s38)。
[0134]
具体地,于步骤s38中,容器管理站3可依据组态档中记录的来源目录211与分享目录7的挂载关系来建立第二容器7。第二容器7被建立后,即具备了分享目录7,并且分享目录7与来源目录211具备从属挂载关系。因此,所述来源子目录2111会经由从属挂载的特性而自动出现在分享目录7下的分享子目录71,不需要容器管理站3再做额外的设定动作。
[0135]
若容器管理站3于步骤34中判断绑定数据库4中不存在所述组态档,则表示第二容器24不曾被建立过。此时,容器管理站3首先确定要建立的分享目录7到第二容器24的命名空间(namespace)(步骤s40),并且将分享目录7的路径名称(path name)储存至绑定数据库4,以做为第二容器24的组态档(步骤s42)。于步骤s42后,容器管理站3依据来源目录211与分享目录7的挂载关系来建立第二容器24,并运行所述应用行程6(步骤s38)。
[0136]
请同时参阅图7,为本发明的动态挂载方法的时序图的第一具体实施例。图7以动作时序进一步说明容器管理站3、绑定数据库4、应用程序界面服务器5(即,第一容器23)、应用行程6(即第二容器24)以及管理者9的作动。
[0137]
如图7所示,首先,主机2运行容器管理站3。容器管理站3运行后,于绑定数据库4中查询先前记录的已被允许分享的目标子目录212,以及先前配置的第二容器24中的分享目录7的相关数据(步骤s51)。接着,容器管理站3于主机2的档案系统21中随机建立来源目录211(例如图4所示的/c2目录),并将在步骤s51中查询到的目录子目录212(若存在)绑定挂载至来源目录211的来源子目录2111(例如图4所示的/c2/a子目录)(步骤s52)。
[0138]
于步骤s52后,容器管理站3即可运行第二容器24,并于第二容器24中运行应用行程6(例如为samba),并且将来源目录211从属挂载第二容器24的分享目录7(例如图4所示的/share目录)(步骤s53)。并且,容器管理站3将分享目录7作为第二容器24的根目录并储存至绑定数据库4,以做为第二容器24的组态档(步骤s54)。
[0139]
第二容器24被运行后,可依照自身的配置设定(configuration)来将分享目录7中的子目录的内容分享出去(步骤s55),藉此实现应用行程6(例如samba)的主要功能。
[0140]
于第二容器24被建立后(即,应用行程6被运行后),容器管理站3可进一步建立第一容器23,并于第一容器23中运行应用程序界面服务器5(步骤s56)。
[0141]
于第一容器23建立后(即,应用程序界面服务器5被运行后),管理者9即可从外部连接应用程序界面服务器5,并且发出查询请求(步骤s57)。其中,所述查询请求是管理者9针对主机2的可分享目录(share-able directories)所发出。
[0142]
应用程序界面服务器5接收所述查询请求后,通过ipc8转传给容器管理站3,请求容器管理站3提供可分享目录的清单。容器管理站3接收查询请求后,即查询主机2的档案系统21并制作主机2的可分享目录的清单,并且通过ipc8回复给应用程序界面服务器5(步骤s58)。应用程序界面服务器5接收所述清单后,即可回复此清单给管理者9(步骤s59)。
[0143]
管理者9收到所述清单后,即可了解主机2的档案系统21中目前有哪些目录是可被允许分享的。因此,管理者9可依据实际需求,针对所需的目标子目录212(例如图4所示的/mnt/a)发出请求指令给应用程序界面服务器5(步骤s60),以要求分享目标子目录212。换句话说,管理者9要求分享的目标子目录212,必然存在于容器管理站3所提供的所述可分享目录的清单中。
[0144]
值得一提的是,为了降低资安风险,所述可分享目录的清单的内容可由容器管理站3来决定,以避免令管理者9直接查看到主机2的档案系统21中的所有数据。惟,上述仅为本发明的其中一种实施方式,但并不以此为限。
[0145]
应用程序界面服务器5接收所述请求指令后,通过ipc8转传至容器管理站3,以请求容器管理站3将目标子目录212挂载至第二容器24(步骤s61)。容器管理站3接收所述请求指令后,即于来源目录211下建立一个来源子目录2111(例如图4所示的/c2/a),并且将档案系统21中的目标子目录212绑定挂载至来源子目录2111(步骤s62)。并且,容器管理站3将此绑定挂载关系记录至绑定数据库4中(步骤s63)。
[0146]
步骤s62后,所述目标子目录212会基于从属挂载的特性而自动出现在第二容器24的分享目录7下的分享子目录71。因此,容器管理站3可通过ipc8告知应用程序界面服务器5其所请求的目标子目录212即为第二容器24中的分享子目录71(步骤s64)。
[0147]
于接收容器管理站3的告知后,应用程序界面服务器5再通过ipc81请求应用行程6分享所述分享子目录71(步骤s65)。此时,应用行程6基于应用程序界面服务器5的请求分享所述分享子目录71,以供主机2内部运算使用,或是分享给外部的管理者9或其他用户。并且,应用行程6将此分享的动作与内容记录于自身的配置设定中(步骤s66)。
[0148]
如上所述,经由本发明的挂载方法所执行的所有挂载动作都会由容器管理站3储存至绑定数据库4。当容器(尤其是运行应用行程6的第二容器24)需要被重建或是主机2需要重启(reboot)时,容器管理站3可查询绑定数据库4中记录的组态档,以于重建容器或重启主机2时自动完成先前已被允许的挂载。如此一来,本发明不但适用于使用执行期间长的容器的应用场景,亦可适用于使用执行期间短、或是需要被频繁重建的容器的应用场景。
[0149]
本发明的挂载方法是将目标子目录212绑定挂载至来源子目录2111,并且通过从属挂载的特性于第二容器24中自动产生分享子目录71。并且,本发明令应用程序界面服务器5仅通过ipc81与应用行程6以及容器管理站3进行沟通,以降低资安风险。为了进一步降
低主机2的数据外泄的风险,本发明的挂载方法还可在应用行程6的分享程序结束后,对目标子目录212(以及来源子目录2111与分享子目录71)进行卸除挂载的动作。
[0150]
请参阅图8,为本发明的卸载方法的流程图的第一具体实施例。如前文所述,应用行程6可依据应用程序界面服务器5的请求,将分享子目录71分享出去。当应用程序界面服务器5接收到停止分享请求时,表示管理者9或其他用户不再需要相关数据。此时,应用程序界面服务器5经由ipc8将所述停止分享请求转传至容器管理站3。
[0151]
容器管理站3经由ipc8从应用程序界面服务器5接收所述停止分享请求(步骤s70),本实施例中,所述停止分享请求是管理者9针对主机2的档案系统21中的目标子目录212所发出的。
[0152]
步骤s70后,容器管理站3通过ipc8告知应用程序界面服务器5所述目标子目录212于第二容器24的分享目录7中的位置(步骤s72)。藉此,应用程序界面服务器5可通过ipc81与应用行程6沟通,以请求应用行程6停止分享目标子目录212(即,分享子目录71)(步骤s74)。
[0153]
步骤s74后,应用行程6停止分享,因此目标子目录212已不需要被绑定挂载至来源子目录2111。此时,容器管理站3卸载(unmount)目标子目录212并移除来源子目录2111(步骤s76)。如此一来,可以有效降低档案系统21的数据经由所述挂载动作而外泄的风险。
[0154]
并且,容器管理站3进一步将步骤s76中执行的卸载动作记录于绑定数据库4中(步骤s78)。于一实施例中,所述绑定数据库4储存在系统中的持续性储存装置(persistent storage)。即使主机2关机或断电,绑定数据库4中记录的组态档皆会被持续保存。如此一来,当第二容器24重建或主机2重启时,容器管理站3可以依据绑定数据库4的内容来自动且快速地将整个系统还原为重建或重启前的状态。
[0155]
续请同时参阅图9,为本发明的卸载方法的时序图的第一具体实施例。图9以动作时序进一步说明容器管理站3的上述卸载动作。
[0156]
如图9所示,当管理者9不再需要已分享的数据时,可发送停止分享请求至应用程序界面服务器5(步骤s91)。应用程序界面服务器5接收停止分享请求后,通过ipc8转传给容器管理站3(步骤s92)。容器管理站3接收停止分享请求后,从停止分享请求的内容得知管理者9请求停止分享目标子目录212,因此容器管理站3通过ipc8告知应用程序界面服务器5所述目标子目录212(例如图4所示的/mnt/a)即为第二容器24中的分享子目录71(例如图4所示的/share/a)(步骤s93)。
[0157]
于收到容器管理站3的告知后,应用程序界面服务器5通过ipc81与应用行程6沟通,并请求应用行程6停止分享所述分享子目录71(步骤s94)。于收到应用程序界面服务器5的请求后,应用行程6即可停止分享。
[0158]
于步骤s93后,容器管理站3可从停止分享请求中得知管理者9不再需要存取目标子目录212,因此可卸载所述目标子目录212,并且移除来源目录211下的来源子目录2111(例如图4所示的/c2/a)(步骤s95)。最后,容器管理站3再将上述卸载动作记录至绑定数据库4中(步骤s96)。如此一来,当第二容器24被重建时,就不会在分享目录7下自动挂载分享子目录71,进而可以降低资安风险。
[0159]
本发明将一个应用程序于架构上分拆成应用程序界面服务器及应用行程,并由分开的两个容器来运行。并且,本发明令容器挂载最少的数据,并于有需要时,再由容器管理
站动态地将主机中的特定数据挂载至应用行程所在的容器。藉此,可以有效地降低使用者对于容器的不恰当设定,导致主机的数据外泄的风险。
[0160]
当然,本发明还可有其它多种实施例,在不背离本发明精神及其实质的情况下,熟悉本领域的技术人员当可根据本发明作出各种相应的改变和变形,但这些相应的改变和变形都应属于本发明所附的权利要求的保护范围。

技术特征:
1.一种主机的容器系统,其特征在于,包括:一主机,具有由多个目录组成的一档案系统;一应用行程,运行于该主机的一容器,并具有至少一分享目录;一容器管理站,运行于该主机,于该档案系统中建立一来源目录,并且该来源目录挂载至该分享目录;及一应用程序界面服务器,接收一外部管理者对于该档案系统中的一目标子目录的一请求指令,并将该请求指令转送至该容器管理站;其中,该容器管理站依据该请求指令将该目标子目录绑定挂载至该来源目录的一来源子目录,并告知该应用程序界面服务器该目标子目录于该分享目录中的位置,藉此该容器通过该分享目录分享该目标子目录供内部运算或分享给外部用户。2.根据权利要求1所述的容器系统,其特征在于,该来源目录以从属挂载的方式挂载至该分享目录,该目标子目录被绑定挂载至该来源子目录后,通过从属挂载的特性自动出现于该分享目录的一分享子目录,其中该容器分享该分享子目录供内部运算或分享给外部用户。3.根据权利要求2所述的容器系统,其特征在于,该应用程序界面服务器与该应用行程运行于该主机的不同容器。4.根据权利要求3所述的容器系统,其特征在于,该应用程序界面服务器通过一第一行程间通讯与该应用行程进行本地端沟通,并且通过一第二行程间通讯转传该请求指令给该容器管理站并接收该容器管理站的告知。5.根据权利要求4所述的容器系统,其特征在于,更包括一绑定数据库,储存该容器的一组态档,该组态档包括该分享目录于该容器中的一路径名称、该来源目录与该分享目录的一挂载关系、以及该目标子目录与该来源子目录的一绑定挂载关系的至少其中之一。6.根据权利要求5所述的容器系统,其特征在于,容器管理站查询该绑定数据库以取得该组态档,依据该组态档建立该容器,并于该容器中运行该应用行程。7.一种动态挂载主机数据至容器的方法,应用于具有一档案系统的一主机,其特征在于,该主机运行一应用行程、一应用程序界面服务器及一容器管理站,该应用程序界面服务器运行于一第一容器,该应用行程运行于一第二容器,并且该方法包括:a1)该容器管理站于该档案系统中建立一来源目录;a2)该容器管理站将该来源目录挂载至该应用行程的一分享目录;a)该容器管理站由该应用程序界面服务器接收一请求指令,其中该请求指令为一外部管理者针对该档案系统中的一目标子目录所发出;b)该容器管理站依据该请求指令将该目标子目录绑定挂载至该来源目录的一来源子目录;及c)该步骤b)后,该容器管理站告知该应用程序界面服务器该目标子目录于该分享目录中的位置,以令该第二容器通过该分享目录分享该目标子目录供内部运算或分享给外部用户。8.根据权利要求7所述的方法,其特征在于,该步骤a2)通过从属挂载的方式将该来源目录挂载至该分享目录,并且该步骤b)后,该目标子目录通过从属挂载的特性自动出现于该分享目录的一分享子目录,该步骤c)由该第二容器分享该分享子目录供内部运算或分享
给外部用户。9.根据权利要求8所述的方法,其特征在于,该应用程序界面服务器于该步骤a)中通过一第一ipc转传该请求指令给该容器管理站,并且于该步骤c)中通过该ipc接收该容器管理站的告知,并通过一第二ipc要求该应用行程分享该分享子目录。10.根据权利要求9所述的方法,其特征在于,该步骤a)之前更包括下列步骤:a01)于一绑定数据库中查询该第二容器的一组态档,其中该组态档包括该分享目录于该第二容器中的一路径名称、该来源目录与该分享目录的一挂载关系、以及该目标子目录与该来源子目录的一绑定挂载关系的至少其中之一;a02)于该绑定数据库中存在该组态档时,依据该组态档的内容将已被允许分享的该目标子目录绑定挂载至该来源子目录;及a03)该步骤a02)后,基于该来源目录与该分享目录的该挂载关系建立该第二容器,并于该第二容器中运行该应用行程。11.根据权利要求10所述的方法,其特征在于,该步骤a)之前更包括下列步骤:a04)于该绑定数据库中不存在该组态档时,确定要建立的该分享目录到该第二容器的一命名空间;a05)将该分享目录的一路径名称储存至该绑定数据库做为该组态档;及a06)基于该来源目录与该分享目录的该挂载关系建立该第二容器,并于该第二容器中运行该应用行程。12.根据权利要求11所述的方法,其特征在于,该步骤a)之前更包括一步骤a07):该容器管理站于该步骤a03)或该步骤a06后建立该第一容器,并于该第一容器中运行该应用程序界面服务器。13.根据权利要求9所述的方法,其特征在于,该步骤a)之前更包括下列步骤:a08)该容器管理站由该应用程序界面服务器接收一查询请求,其中该查询请求为该外部管理者针对该主机的一可分享目录所发出;及a09)该容器管理站依据该查询请求回复该可分享目录的一清单给该应用程序界面服务器,藉此提供给该外部管理者,其中该目标子目录记录于该清单中。14.根据权利要求9所述的方法,其特征在于,更包括下列步骤:d)该容器管理站由该应用程序界面服务器接收一停止分享请求,其中该停止分享请求为该外部管理者针对该目标子目录所发出;e)该容器管理站告知该应用程序界面服务器该目标子目录于该分享目录中的位置,藉此该应用程序界面服务器请求该应用行程停止分享该目标子目录;f)该容器管理站卸载该目标子目录并移除该来源子目录;及g)将卸载动作记录于一绑定数据库。15.一种应用程序,记录有电脑可执行程序码,其特征在于,于一主机执行了该电脑可执行程序码后,可实现如权利要求7-14所述的各步骤。

技术总结
一种主机的容器系统,包括具有档案系统的主机、运行于主机的容器的应用行程及应用程序界面服务器、以及运行于主机中的容器管理器,其中容器管理站于档案系统中建立来源目录,并且将来源目录挂载至应用行程的分享目录。应用程序界面服务器接收针对档案系统中的一个目标子目录所发出的请求指令,容器管理器依据请求指令将目标子目录绑定挂载至来源目录的子目录。并且,容器管理站告知应用程序界面服务器此目标子目录于分享目录中的位置,藉以通过容器中的分享目录来存取所需数据。容器中的分享目录来存取所需数据。容器中的分享目录来存取所需数据。


技术研发人员:许进兴
受保护的技术使用者:威联通科技股份有限公司
技术研发日:2022.02.14
技术公布日:2023/7/22
版权声明

本文仅代表作者观点,不代表航空之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

飞行汽车 https://www.autovtol.com/

分享:

扫一扫在手机阅读、分享本文

相关推荐