一种基于Docker容器的容器自动化管理方法与流程

文档序号:18463919发布日期:2019-08-17 02:17阅读:236来源:国知局
一种基于Docker容器的容器自动化管理方法与流程

本发明涉及业务运维技术领域,尤其涉及一种基于docker容器的容器自动化管理方法。



背景技术:

docker利用linux核心中的资源分离机制,例如cgroups,以及linux核心名字空间(namespaces),来创建独立的容器(containers)。这可以在单一linux实体下运作,避免引导一个虚拟机造成的额外负担。linux核心对名字空间的支持完全隔离了工作环境中应用程序的视野,包括行程树、网络、用户id与挂载文件系统,而核心的cgroup提供资源隔离,包括cpu、存储器、blocki/o与网络。

docker让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。目前处理容器化多个rabbitmq消费者进程时,存在对多个彼此之间无数据传递的rabbitmq消费者容器及用户队列进行统一安全调度管理的难题。



技术实现要素:

针对上述问题,本发明提出了一种基于docker容器的容器自动化管理方法,旨在解决在处理容器化多个rabbitmq消费者进程时,对多个彼此之间无数据传递的rabbitmq消费者容器及用户队列进行统一安全调度管理的难题,其中包括对多个rabbitmq消费者容器的自动创建,状态监测,停止及删除等,以及对应的rabbitmq消费者用户、队列的创建删除,用户隔离(一个用户只对应一个消费者容器),权限管理(一个用户只对应一个消费队列),实现安全有效的rabbitmq消费者容器及rabbitmq用户队列自动化管理。

此管理方法可通用于连接不同程序容器如nsq,mongodb、mysql等,最终在一台物理机中组成实现一套进行完整的基于docker容器的rabbitmq消费者容器管理方案。

本发明旨在解决在多个rabbitmq消费者容器的自动化管理,不涉及数据库的创建及rabbitmq消费队列的创建,所以本方案所需的先决条件包括已有的mysql数据库和rabbitmq服务环境。

本发明通过以下技术方案来实现上述目的:

一种基于docker容器的容器自动化管理方法,包括以下步骤:

1)搭建已有的mysql数据库及rabbitmq服务环境;

2)在mysql中创建关于rabbitmq消费者用户及队列的数据库及数据表,用于实时创建所需要的rabbitmq消费者用户、队列信息及需要创建的rabbitmq消费者容器信息;

3)通过dockerrun-privilage创建管理容器dockermanager,并在管理容器中创建管理脚本dockermanager.py;

4)根据步骤3中从mysq1中读取到的需要创建的rabbitmq消费者容器信息,通过dockerpythonapi,在管理脚本docker_manager.py中访问docker.sock原始套接字读取本地已有docker容器;具体为:

从管理脚本中定时读取mysqi中存储的关于rabbitmq所需用户及队列信息,通过rabbitmqhttpapi创建或删除所需的用户及队列,如果是创建操作,则在创建时将用户权限设置为一个用户仅对应一个队列;

从管理脚本中定时读取mysqi中存储的关于rabbitmq所需用户及队列信息,并通过dockerpython库的创建或删除对应的消费者容器,并将上一步骤中的用户及队列信息传入消费者容器,实现一个用户队列仅对应一个消费者容器;

5)判断已有的消费者容器的状态,并通过对mysql数据库中rabbitmq相关信息的定时访问,判断是否存在信息更新,以此判断是否有消费者容器及rabbitmq用户/队列的创建或删除需求,以此实现实时管理。

进一步方案为,所述步骤1具体为:基于python3.6基础docker镜像,创建管理容器dockermanager时开启特权模式--privilege,并将/var/run/docker.sock原始套接字挂载到容器中,同时通过-link链接到rabbitmq消息队列容器,及mysql、mongodb数据库容器,然后在管理容器中创建python管理脚本docker_manager.py,并导入dockerpython库。

进一步方案为,所述步骤3具体为:从管理容器dockermanager中,通过python管理脚本docker_manager.py定时读取mysql中已有的和新添加的rabbitmq消费者用户及队列信息,通过rabbitmq的httpapi,实现对rabbitmq消费者用户、队列的实时管理——创建、删除及用户权限设置,此步骤中创建的rabbitmq消费者用户和队列可应用于实际场景中所需的定制化的生产者身份验证。

进一步方案为,所述步骤5具体为:通过定时访问mysql中创建的关于rabbitmq消费者用户及队列的数据库及数据表,判断rabbitmq用户/队列是否存在需要新建或删除、消费者容器是否需要新建或删除的操作,在管理脚本dockermanager.py中根据已有容器名是否包含handler进行类型分类,同时访问已有的消费者容器状态,并判断已有消费者容器是否存在状态异常,实现对容器名包含handler的rabbitmq消费者容器进行的实时状态监测、停止容器、删除容器的自动化管理操作。

进一步方案为,所述步骤5之后还包括:在管理脚本中添加whiletrue逻辑将脚本至于一直运行的状态,并添加标准日志输出、配置文件读取的细节化功能。

本发明的有益效果在于:

现有容器化技术往往只在意容器之间的解耦与隔离,但不会考虑多个容器之间的自动化管理,本发明结合已有容器技术,针对rabbitmq消费者用户/队列/消费者容器实现相互隔离的多个rabbitmq消费者容器之间的自动化的安全高效的调度管理,同时本发明也可通用于类似应用场景入nsq消费者自动化安全管理、kafka消费者自动化安全管理。

附图说明

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

图1为本发明实施的流程图。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚,下面将对本发明的技术方案进行详细的描述。显然,所描述的实施例仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所得到的所有其它实施方式,都属于本发明所保护的范围。

在任一实施例中,如图1所示,本发明的一种基于docker容器的容器自动化管理方法,包括以下步骤:

1)搭建已有的mysql数据库及rabbitmq服务环境;具体为:基于python3.6基础docker镜像,创建管理容器dockermanager时开启特权模式--privilege,并将/var/run/docker.sock原始套接字挂载到容器中,同时通过—link链接到rabbitmq消息队列容器,及mysql、mongodb数据库容器,然后在管理容器中创建python管理脚本dockermanager.py,并导入dockerpython库。

2)在mysql中创建关于rabbitmq消费者用户及队列的数据库及数据表,用于实时创建所需要的rabbitmq消费者用户、队列信息及需要创建的rabbitmq消费者容器信息;此步骤还可结合前端web框架,实现通过前端页面的不同按钮创建mysql中所需信息,由于本方案不涉及前端web框架的设计与应用,遂此部分省略,并通过手动操作mysql中数据来替代。

3)通过dockerrun-privilage创建管理容器dockermanager,并在管理容器中创建管理脚本dockermanager.py;具体为:从管理容器dockermanager中,通过python管理脚本dockermanager.py定时读取mysql中已有的和新添加的rabbitmq消费者用户及队列信息,通过rabbitmq的httpapi,实现对rabbitmq消费者用户、队列的实时管理——创建、删除及用户权限设置,此步骤中创建的rabbitmq消费者用户和队列可应用于实际场景中所需的定制化的生产者身份验证,比如mqtt身份验证等。

此步骤中用到的rabbitmq的httpapi包括:

i)创建队列:put‘http://{ip}/api/queues/{queue_name}’

ii)创建用户:put‘http://{ip}/api/users/{user_name}’

iii)设置用户权限:put‘http://{ip}/api/permissions/%2f/{user_name}’

iv)设置用户队列权限:

put‘http://{ip}/api/topic-permissions/%2f/{user_name}’

v)删除队列:del‘http://{ip}/api/queues/%2f/{queue_name}’

vi)删除用户:del‘http://{ip}/api/users/{user_name}’。

4)根据步骤3中从mysq1中读取到的需要创建的rabbitmq消费者容器信息,通过dockerpythonapi,在管理脚本docker_manager.py中访问docker.sock原始套接字读取本地已有docker容器;:

importdocker

docker_client=docker.from_env()

docker_list=docker_client.containers.1ist(a1l)

针对自己所需要的定制化的rabbitmq消费者容器创建消费者容器镜像(此处不列举出具体的消费者内容):

dockerbuild-tconsumer.

并进行rabbitmq消费者容器的创建,实现一个rabbitmq用户对应一个消费者容器,当然此处还可通过创建一个docker_client.containers.run(images=’consumer’,name=’consumer_handler’,links={},volumes=(},environment={});在link参数中可将消费者容器链接实际应用场景中需要的其他不同类型的容器中,如mysql、mongodb等组成完整的容器环境。

在environment参数中将步骤3中创建的rabbitmq消费者用户名及队列名传入所创建的消费者容器中,以此来实现不同的消费者容器之间的用户隔离(一个用户对应一个消费者容器)及权限管理(一个用户对应一个消费队列)等rabbitmq消费者用户安全管理。具体为:

从管理脚本中定时读取mysqi中存储的关于rabbitmq所需用户及队列信息,通过rabbitmqhttpapi创建或删除所需的用户及队列,如果是创建操作,则在创建时将用户权限设置为一个用户仅对应一个队列;

从管理脚本中定时读取mysqi中存储的关于rabbitmq所需用户及队列信息,并通过dockerpython库的创建或删除对应的消费者容器,并将上一步骤中的用户及队列信息传入消费者容器,实现一个用户队列仅对应一个消费者容器;

5)判断已有的消费者容器的状态,并通过对mysql数据库中rabbitmq相关信息的定时访问,判断是否存在信息更新,以此判断是否有消费者容器及rabbitmq用户/队列的创建或删除需求,以此实现实时管理。具体为:通过定时访问mysql中创建的关于rabbitmq消费者用户及队列的数据库及数据表,判断rabbitmq用户/队列是否存在需要新建或删除、消费者容器是否需要新建或删除的操作,在管理脚本dockermanager.py中根据已有容器名是否包含handler进行类型分类,同时访问已有的消费者容器状态,并判断已有消费者容器是否存在状态异常,实现对容器名包含handler的rabbitmq消费者容器进行的实时状态监测、停止容器、删除容器的自动化管理操作。

步骤5之后还包括:在管理脚本中添加whiletrue逻辑将脚本至于一直运行的状态,并添加标准日志输出、配置文件读取的细节化功能。

现有容器化技术往往只在意容器之间的解耦与隔离,但不会考虑多个容器之间的自动化管理,本发明旨在结合已有容器技术,针对rabbitmq消费者用户/队列/消费者容器实现相互隔离的多个rabbitmq消费者容器之间的自动化的安全高效的调度管理,同时本发明也可通用于类似应用场景入nsq消费者自动化安全管理、kafka消费者自动化安全管理等。

以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。另外需要说明的是,在上述具体实施方式中所描述的各个具体技术特征,在不矛盾的情况下,可以通过任何合适的方式进行组合,为了避免不必要的重复,本发明对各种可能的组合方式不再另行说明。此外,本发明的各种不同的实施方式之间也可以进行任意组合,只要其不违背本发明的思想,其同样应当视为本发明所公开的内容。

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