一种解决docker容器启动并发瓶颈的方法

文档序号:10470984阅读:613来源:国知局
一种解决docker容器启动并发瓶颈的方法
【专利摘要】本发明涉及一种解决docker容器启动并发瓶颈的方法,通过修改docker的源码,解决docker容器启动并发的问题,在启动过程中,与管理平台通讯,根据管理平台的查询结果定向分配docker容器的网络参数,从而避免分配过程的加锁和解锁,进而提高docker容器的启动并发性,使得容器队列在大量容器启动的过程中不会发生阻塞。
【专利说明】
-种解决docker容器启动并发瓶颈的方法
技术领域
[0001] 本发明设及计算机领域,具体设及一种解决docker容器启动并发瓶颈的方法。
【背景技术】
[0002] docker是化aS提供商dotCloud开发的一个基于LXC的高级容器引擎,源代码托管 在Github上,docker基于go语言并遵从Apache2.0协议开源,让开发者可W打包他们的应用 W及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可W实现虚拟 化。
[0003] docker容器是完全使用沙箱机制,相互之间不会有任何接口(类似iPhone的app)。 几乎没有性能开销,可W很容易地在机器和数据中屯、中运行。最重要的是,他们不依赖于任 何语言、框架包括系统。
[0004] 基于docker构建标准化的运行环境有别于现有的技术方案,并且能够避免现有技 术方案存在的缺陷。现有的方案大多是在一个baseOS上运行一套P叫pet/chef,或者一个 image文件,然而运两种技术方案都不够完善,前者需要base 0S提供许多前提条件而后者 几乎不可W修改;此外,后者文件体积大,环境管理和版本控制本身也是一个问题。
[0005] 由于docker基于LXC的轻量级虚拟化的特点,docker相比KVM之类最明显的特点就 是启动快,资源占用小。运主要是因为LXC具有轻量级的特点,启动快,而且docker能够只加 载每个container变化的部分,运样资源占用小,能够在单机环境下与KVM之类的虚拟化方 案相比能够更加快速和占用更少资源
[0006] docker 的网络模式包括 host、con1:aine;r、none 和 bridge:
[0007] (1化ost模式:启动容器的时候不会获得一个独立的化twork化mespace,而是和 宿主机共用一个化twork化mespace,容器将不会虚拟出自己的网卡,配置自己的IP等,而 是使用宿主机的IP和端口;
[000引(2)containe;r模式:运个模式指定新创建的容器和已经存在的一个容器共享一个 化twork Namespace,而不是和宿主机共享;新创建的容器不会创建自己的网卡,配置自己 的IP,而是和一个指定的容器共享IP、端口范围等,同样,两个容器除了网络方面,其他的如 文件系统、进程列表等还是隔离的,两个容器的进程可W通过10网卡设备通信;
[0009] (3)none模式:运个模式和前两个不同;在运种模式下,Docker容器拥有自己的 化twork Namespace,但是,并不为Docker容器进行任何网络配置,也就是说,运个Docker容 器没有网卡、IP、路由等信息,需要我们自己为Docker容器添加网卡、配置IP等;
[0010] (4)b;ridge模式:bridge模式是Docker默认的网络设置,此模式会为每一个容器分 配化twork Namespace、设置IP等,并将一个主机上的Docker容器连接到一个虚拟网桥上。
[0011] docker容器启动时,如果设置了分配IP的网络模式,例如bridge,在运个模式中, 为避免IP地址冲突需要做校验,如图1所示,会在获取IP,掩码,网关阶段加锁,如果没有IP 地址冲突,则docker容器能够获得相关网络参数并启动,否则返回错误;在加锁的过程中, 其它容器需要排队等候,造成容器队列的阻塞。

【发明内容】

[0012] 为了解决上述技术问题,本发明提供了一种解决docker容器启动并发瓶颈的方 法。本发明通过修改docker的源码,依托与外部设备通讯,实现对docker网络参数的定向分 配,从而提高了容器启动的并发性能,使得容器队列在大量容器启动的过程中不会发生阻 塞〇
[0013] 本发明是W如下技术方案实现的,一种解决docker容器启动并发瓶颈的方法,包 括W下步骤:
[0014] S1.查询docker容器启动方式,若为分配IP的网络模式,则进行S2;若为非分配IP 的网络模式,则正常启动;
[0015] S2.获取docker容器标识;
[0016] S3.将docker容器标识传输至所述docker容器管理平台;
[0017] S4.所述docker容器管理平台根据所述docker容器标识查询docker定向分配记录 表,若查询结果为空,则返回错误,所述docker容器不能启动;若查询结果不为空,则将 docker定向分配记录表中与所述docker容器标识对应的网络参数传输至所述docker容器, 所述docker容器根据获取的网络参数进行启动。
[0018] 优选地,所述docker定向分配记录表用于记录docker容器与所述docker容器对应 的网络参数的对应关系。
[0019] 优选地,所述docker容器管理平台用于管理所述docker定向分配记录表中的记 录,包括对所述docker定向分配记录表中的记录进行修改、增加和/或删除。
[0020] 优选地,所述容器标识具体为容器名称。
[0021] 优选地,所述容器标识具体为容器ID。
[0022] 优选地,所述网络参数包括:容器的IP、容器的掩码、容器的网关。
[0023] 优选地,所述docker容器管理平台还用于管理所述容器与所述容器自身属性的对 应关系。
[0024] 优选地,所述容器自身属性包括:容器分组信息和容器运行状态。
[0025] 所述docker容器管理平台通过容器管理记录表管理所述容器与所述容器自身属 性的对应关系。
[00%] 所述容器管理记录表包括ID、容器ID、容器名称、hostname、command、slave节点、 group分组、运行状态、创建时间和相关操作等内容,所述相关操作包括启动、停止和重启。 [0027]所述docker容器管理平台对所述容器管理记录表中的内容还能够进行相关统计, 所述统计内容包括但不限于容器总数统计、容器运行状态统计、分组统计、slave节点统计、 IP资源池统计和可用资源统计,所述容器运行状态包括运行和停止。
[00%]优选的,将上述方法应用于docker容器启动还需要W下步骤:
[0029] (1)下载docker应用容器引擎的源代码;
[0030] (2)按照所述方法对所述源代码进行修改;
[0031] (3)编译所述源代码,并生成用于启动docker的可执行程序;
[0032] (4)创建docker容器管理平台;
[0033] (5)同时运行所述可执行程序和docker容器管理平台。
[0034] 本发明的有益效果是:
[0035] 本发明提供了一种解决docker容器启动并发瓶颈的方法。本发明通过修改docker 的源码,依托与外部设备通讯,实现对docker网络参数的定向分配,从而提高了容器启动的 并发性能,使得容器队列在大量容器启动的过程中不会发生阻塞。
【附图说明】
[0036] 图1是现有技术中docker容器启动时进行校验的流程图;
[0037] 图2是实施例中docker容器启动时的流程图;
[0038] 图3是docker容器启动过程的架构图。
【具体实施方式】
[0039] 为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一 步地详细描述。
[0040] 在一个实施例中,如图2所示,一种解决docker容器启动并发瓶颈的方法,包括W 下步骤:
[0041] S1.查询docker容器启动方式,若为分配IP的网络模式,则进行S2;若为非分配IP 的网络模式,则正常启动;
[0042] S2.获取docker容器名称,并连接docker容器管理平台;
[0043] S3.将docker容器名称传输至所述docker容器管理平台;
[0044] S4.所述docker容器管理平台根据所述docker容器名称查询docker定向分配记录 表,若查询结果不为空,则进行S5 ;若查询结果为空,则返回错误,所述docker容器不能启 动;
[0045] S5.将docker定向分配记录表中与所述docker容器名称对应的网络参数传输至所 述docker容器,所述docker定向分配记录表用于记录docker容器与所述docker容器对应的 网络参数的对应关系;
[0046] S6. docker容器根据获取的网络参数进行启动。
[0047] 将所述方法应用于docker容器启动还需要W下步骤:
[004引(1)下载docker应用容器引擎的源代码;
[0049] (2)按照所述方法对所述源代码进行修改;
[0050] (3)编译所述源代码,并生成用于启动docker的可执行程序;
[0化1] (4)创建docker容器管理平台;
[0052] (5)同时运行所述可执行程序和docker容器管理平台。
[0化3] 所述docker容器管理平台用于管理所述docker定向分配记录表中的记录,包括对 所述docker定向分配记录表中的记录进行修改、增加和/或删除;所述网络参数包括:容器 的IP、容器的掩码、容器的网关。
[0054]若所述docker容器在定向分配记录表中不存在,则启动出现错误,并且提示管理 员所述docker容器不存在,所述管理员通过向所述docker定向分配表中添加所述docker容 器,并为所述docker容器配置网络参数后,更新所述docker定向分配记录表。在所述docker 定向记录表被更新之后,所述docker容器即可正常启动。
[0化日]所述docker定向分配记录表如表1所示:
[0化6] 表1 docker定向分配记录表
[0化7]
[0化引
[0059] 所述docker容器管理平台还用于管理所述容器与所述容器自身属性的对应关系; 所述容器自身属性包括:容器分组信息和容器运行状态。
[0060] 所述docker容器管理平台通过容器管理记录表管理所述容器与所述容器自身属 性的对应关系。
[0061 ] 所述容器管理记录表包括ID、容器ID、容器名称、hostname、command、slave节点、 group分组、运行状态、创建时间和相关操作等内容,所述相关操作包括启动、停止和重启。
[0062]所述docker容器管理平台依托mysql进行研发。mysql是一个关系型数据库管理系 统,由瑞典MySQL AB公司开发,目前属于化acle旗下公司。mysql最流行的关系型数据库管 理系统,在肥B应用方面mysql是最好的畑BMS(Relational Database Management System, 关系数据库管理系统)应用软件之一。mysql是一种关联数据库管理系统,关联数据库将数 据保存在不同的表中,而不是将所有数据放在一个大仓库内,运样就增加了速度并提高了 灵活性。mysql所使用的SQL语言是用于访问数据库的最常用标准化语言。mysql体积小、速 度快、总体拥有成本低,尤其是开放源码运一特点,使得mysql成为构建docker容器管理平 台的首选数据库,而docker也能够与mysql数据库进行通讯。
[0063] 第二个实施例,在本实施例中,docker容器启动过程的架构图如图3所示,docker 容器启动过程需要中需要依赖5个模块,分别是Docker Daemon,Docker Client,Driver, Libcontainer 和 Container,其中Dr i ver 还包括networkdr i ver,graphdriver 和 execdriver。
[0064] Docker Daemon是Docker架构中运行在后台的守护进程,大致可W分为Docker Se;rve;r、E;ngine和Jobs部分。Docker Daemon可W认为是通过Docker Server模块接受 Docker C1 ient的请求,并在化gine中处理请求,然后根据请求类型,包I建出指定的化b并运 行。
[0(?日]Docker Daemon与化iver相互作用,具体运行过程有W下几种可能:向Docker Regist巧获取镜像,通过graphdriver执行容器镜像的本地化操作,通过networkdriver执 行容器网络环境的配置,通过exec化iver执行容器内部运行的执行工作等
[0066] Libcontainer是Docker中用于容器管理的包,它基于Go语言实现,通过管理 namespaces、cg;roups、capabili ties W及文件系统来进行容器控制。Ubcontainer创建容 器,并对容器进行生命周期管理。只要实现了 Libcontainer定义的一组接口,Docker都可W 运行,运就为Docker实现全面的跨平台带来了可能。总体而言,Ubcontainer本身主要分为 Ξ大块工作内容,一是容器的创建及初始化,二是容器生命周期管理,Ξ则是进程管理
[0067] Container对象主要包含了容器配置、控制、状态显示等功能,是对不同平台容器 功能的抽象。每一个Container进程内部都是线程安全的。因为Container有可能被外部的 进程销毁,所W每个方法都会对容器是否存在进行检测。
[0068] 运种模块架构是启动docker的必要架构,在现有技术中,由于docker容器分配IP 和掩码,因此需要对运个过程进行加锁,如果容器在集群中批量操作的时候,就容易造成阻 塞,而运中阻塞就造成了容器的启动队列的积压,从而影响到容器启动的效率和稳定性;本 实施例中通过修改docker的源码,依托与外部设备通讯,并将所述docker定向分配记录表 在外部设备上予W实现,从而实现了对docker网络参数的定向分配,避免了加锁和解锁的 过程,运就使得在集群中批量操作的时候,能够快速的进行容器的启动,克服了容器启动过 程中的并发瓶颈问题。
[0069] 在是本实例的架构下研发的一种解决docker容器启动并发瓶颈的方法,包括W下 步骤:
[0070] S1.查询docker容器启动方式,若为分配IP的网络模式,则进行S2;若为非分配IP 的网络模式,则正常启动;
[0071] S2.获取docker容器名称,并连接docker容器管理平台;
[0072] S3.将docker容器名称传输至所述docker容器管理平台;
[0073] S4.所述docker容器管理平台根据所述docker容器名称查询docker定向分配记录 表,若查询结果不为空,则进行S5 ;若查询结果为空,则返回错误,所述docker容器不能启 动;
[0074] S5.将docker定向分配记录表中与所述docker容器名称对应的网络参数传输至所 述docker容器,所述docker定向分配记录表用于记录docker容器与所述docker容器对应的 网络参数的对应关系;
[00巧]S6. docker容器根据获取的网络参数进行启动。
[0076] 将所述方法应用于docker容器启动还需要W下步骤:
[0077] (1)下载docker应用容器引擎的源代码;
[0078] (2)按照所述方法对所述源代码进行修改;
[0079] (3)编译所述源代码,并生成用于启动docker的可执行程序;
[0080] (4)创建docker容器管理平台;
[0081] (5)同时运行所述可执行程序和docker容器管理平台。
[0082] 所述docker容器管理平台用于管理所述docker定向分配记录表中的记录,包括对 所述docker定向分配记录表中的记录进行修改、增加和/或删除;所述网络参数包括:容器 的IP、容器的掩码、容器的网关。
[0083] 若所述docker容器在定向分配记录表中不存在,则启动出现错误,并且提示管理 员所述docker容器不存在,所述管理员通过向所述docker定向分配表中添加所述docker容 器,并为所述docker容器配置网络参数后,更新所述docker定向分配记录表。在所述docker 定向记录表被重新更新之后,所述docker容器即可正常启动。
[0084] 所述docker容器管理平台还用于管理所述容器与所述容器自身属性的对应关系; 所述容器自身属性包括:容器分组信息和容器运行状态。
[0085] 所述docker容器管理平台通过容器管理记录表管理所述容器与所述容器自身属 性的对应关系。
[0086] 所述容器管理记录表包括ID、容器ID、容器名称、hostname、command、slave节点、 group分组、运行状态、创建时间和相关操作等内容,所述相关操作包括启动、停止和重启。
[0087] 此外,本实施例中还包括所述docker容器管理平台对所述容器管理记录表中的内 容进行相关统计,所述统计内容包括容器总数统计、容器运行状态统计、分组统计、slave节 点统计、IP资源池统计和可用资源统计,本实施例中docker容器管理平台统计表如表2所 /J、- 〇
[0088] 表2 docker容器管理平台统计表
[0089]
[0090]
[0091 ] 所述docker容器管理平台中包括docker定向分配记录表、容器管理记录表和 docker容器管理平台统计表,所述docker容器管理平台依托mysql进行研发,对上述Ξ张表 进行综合管理。
[0092] 第Ξ个实施例,docker容器启动过程需要中需要依赖5个模块,分别是Docker Daemon,Docker Client,Driver,Libcontainer 和 Container,其中Driver 还包括 networkdriver,graphdriver和execdriver。
[0093] 依托上述5个模块解决docker容器启动并发瓶颈的方法,包括W下步骤:
[0094] S1.查询docker容器启动方式,若为分配IP的网络模式,则进行S2;若为非分配IP 的网络模式,则正常启动;
[00巧]S2.获取docker容器ID,并连接docker容器管理平台;
[0096] S3.将docker容器ID传输至所述docker容器管理平台;
[0097] S4.所述docker容器管理平台根据所述docker容器ID查询docker定向分配记录 表,若查询结果不为空,则进行S5 ;若查询结果为空,则返回错误,所述docker容器不能启 动;
[0098] S5.将docker定向分配记录表中与所述docker容器ID对应的网络参数传输至所述 docker容器,所述docker定向分配记录表用于记录docker容器与所述docker容器对应的网 络参数的对应关系;
[0099] S6.docker容器根据获取的网络参数进行启动;所述网络参数包括:容器的IP、容 器的掩码、容器的网关。
[0100] 将所述方法应用于docker容器启动还需要W下步骤:
[0101] (1)下载docker应用容器引擎的源代码;
[0102] (2)按照所述方法对所述源代码进行修改;
[0103] (3)编译所述源代码,并生成用于启动docker的可执行程序;
[0104] (4)创建docker容器管理平台;
[0105] (5)同时运行所述可执行程序和docker容器管理平台。
[0106] 所述docker容器管理平台用于管理所述docker定向分配记录表中的记录,包括对 所述docker定向分配记录表中的记录进行修改、增加和/或删除;所述网络参数包括:容器 的IP、容器的掩码、容器的网关。
[0107] 若所述docker容器在定向分配记录表中不存在,则启动出现错误,并且提示管理 员所述docker容器不存在,所述管理员通过向所述docker定向分配表中添加所述docker容 器,并为所述docker容器配置网络参数后,更新所述docker定向分配记录表。在所述docker 定向记录表被重新更新之后,所述docker容器即可正常启动。
[0108] 所述docker定向分配记录表如表3所示:
[0109] 表3 docker定向分配记录表
[0110]
[0112] 所述docker容器管理平台还用于管理所述容器与所述容器自身属性的对应关系; 所述容器自身属性包括:容器分组信息和容器运行状态。
[0113] 所述docker容器管理平台通过容器管理记录表管理所述容器与所述容器自身属 性的对应关系。
[0114] 所述容器管理记录表包括ID、容器ID、容器名称、hostname、command、slave节点、 group分组、运行状态、创建时间和相关操作等内容,所述相关操作包括启动、停止和重启。
[0115] 所述docker容器管理平台使用docker容器管理平台统计表对所述容器管理记录 表中的内容进行相关统计,所述docker容器管理平台统计表的内容包括容器总数统计、容 器运行状态统计、分组统计、slave节点统计、IP资源池统计和可用资源统计。
[0116] 本实施例中还包括所述docker容器管理平台对于IP资源池进行管理,所述docker 容器管理平台使用IP资源池管理表对所述IP资源池进行管理,所述IP资源池管理表包括IP 资源池 ID号、IP资源池名称、IP资源池所属分组、IP资源池备注、IP资源池掩码、IP资源池掩 码注释、IP资源池网关、IP资源池网关注释、IP资源池对应的docker容器ID号和对于所述IP 资源池的操作,所述操作包括修改和删除。
[0117] 所述docker容器管理平台中包括docker定向分配记录表、容器管理记录表、IP资 源池管理表和docker容器管理平台统计表,所述docker容器管理平台依托mysql进行研发, 对上述四张表进行综合管理。
[0118] W上所掲露的仅为本发明较佳实施例而已,当然不能W此来限定本发明之权利范 围,因此依本发明权利要求所作的等同变化,仍属本发明所涵盖的范围。
【主权项】
1. 一种解决docker容器启动并发瓶颈的方法,其特征在于,包括以下步骤:51. 查询docker容器启动方式,若为分配IP的网络模式,则进行S2;若为非分配IP的网 络模式,则正常启动;52. 获取docker容器标识;53. 将docker容器标识传输至所述docker容器管理平台; S4 ·所述docker容器管理平台根据所述docker容器标识查询docker定向分配记录表, 若查询结果为空,则返回错误,所述docker容器不能启动;若查询结果不为空,则将docker 定向分配记录表中与所述docker容器标识对应的网络参数传输至所述docker容器,所述 docker容器根据获取的网络参数进行启动。2. 根据权利要求1所述的一种解决docker容器启动并发瓶颈的方法,其特征在于,所述 docker定向分配记录表用于记录docker容器与所述docker容器对应的网络参数的对应关 系。3. 根据权利要求1所述的一种解决docker容器启动并发瓶颈的方法,其特征在于,所述 docker容器管理平台用于管理所述docker定向分配记录表中的记录,包括对所述docker定 向分配记录表中的记录进行修改、增加和/或删除。4. 根据权利要求1-3中任意一项所述的一种解决docker容器启动并发瓶颈的方法,其 特征在于,所述容器标识具体为容器名称。5. 根据权利要求1-3中任意一项所述的一种解决docker容器启动并发瓶颈的方法,其 特征在于,所述容器标识具体为容器ID。6. 根据权利要求1所述的一种解决docker容器启动并发瓶颈的方法,其特征在于,所述 网络参数包括:容器的IP、容器的掩码、容器的网关。7. 根据权利要求1所述的一种解决docker容器启动并发瓶颈的方法,其特征在于,所述 docker容器管理平台还用于管理所述容器与所述容器自身属性的对应关系。8. 根据权利要求7所述的一种解决docker容器启动并发瓶颈的方法,其特征在于,所述 容器自身属性包括:容器分组信息和容器运行状态。
【文档编号】G06F9/455GK105824688SQ201610149449
【公开日】2016年8月3日
【申请日】2016年3月16日
【发明人】王建飞, 李岩, 刘金国, 姚键, 潘柏宇, 王冀
【申请人】合网络技术(北京)有限公司, 合一网络技术(北京)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1