Docker容器内多进程管理(一) | 您所在的位置:网站首页 › 容器窗口管理进程无法就绪 › Docker容器内多进程管理(一) |
导读
Docker在设计时并不推崇在一个容器中运行多个进程,但在一些实际的场景中很多都可能需要在一个容器中,同时运行多个程序。在非容器的环境下系统初始化的时候,都会启动一个init进程,其余的进程都由它来管理,但容器环境下这种后台启动进程的方式都不可用。目前主要有两个工具,一个是Supervisor,另一个是Monit。本篇先来介绍Supervisor,Monit会在之后的文章中再做详解。
传统环境下同时运行多个进程非常简单,系统初始化启动一个init或者systemctl进程,其余的进程都由它来管理。在容器环境下没有init进程,启动一个Docker容器,只能让它运行一个前台程序。 那么有办法解决这个问题吗? 目前主要有两个工具,一个是Supervisor,另一个是Monit。本篇先来介绍Supervisor,Monit会在之后的文章中再做详解。 一、Supervisor介绍及原理Supervisor是一个C/S架构进程管理工具,通过它可以监控和控制其他的进程,同时它自身提供了一个WebUI,可以在WebUI进行start,stop,restart操作。由Supervisor管理的进程,都是它的子进程。 在Linux系统启动之后,第一个启动的用户态进程是/sbin/init ,它的PID是1,其余用户态的进程都是init进程的子进程。Supervisor在Docker容器里面充当的就类似init进程的角色,其它的应用进程都是Supervisor进程的子进程。通过这种方法就可以实现在一个容器中启动运行多个应用。 以下是在容量里面看到的由Supervisor管理mysql-server和apache的进程情况 官网上提供了很多方法来安装Supervisor,本文介绍两种最常用的方法 yum直接安装 使用pip安装 注意 使用pip安装Supervisor完成后需要pip install setuptools --upgrade升级setuptools工具,否则会有如下报错 [root@localhost ~]# echo_supervisord_conf > /etc/supervisord.conf Traceback (most recent call last): File "/usr/bin/echo_supervisord_conf", line 5, in from pkg_resources import load_entry_point File "/usr/lib/python2.6/site-packages/pkg_resources.py", line 2655, in working_set.require(__requires__) File "/usr/lib/python2.6/site-packages/pkg_resources.py", line 648, in require needed = self.resolve(parse_requirements(requirements)) File "/usr/lib/python2.6/site-packages/pkg_resources.py", line 546, in resolve raise DistributionNotFound(req) pkg_resources.DistributionNotFound: meld3>=0.6.5 2、Supervisord配置安装完成之后,首选需要创建一份supervisor的配置文件,通过echo_supervisord_conf生成一个配置文件模板,启动supervisor的时候,默认会在当前运行目录下寻找supervisord.conf,所以一般在启动的时候用-c指定配置文件。 生成的配置文件模板,包括多段配置,下面就来逐段介绍,配置和含义: [unix_http_server]
[inet_http_server]
Supervisor服务的配置项,上面已经很清楚了,包括了logfile,logfile_maxbytes等等,可以参考上面来配。 [supervisorctl] Supervisor的客户端程序supervisorctl的相关配置,注意serverurl对应的sock就是[unix_http_server]中file的配置项,如果上面配置了用户名密码,此处也需要配置 [program:theprogramname] 具体需要监控的程序配置项,通常不会直接定义在这里,往下看。 [include] 指定包含的配置文件的路径,通常被监控的程序配置文件,会放在这个路径下,一个程序一个,比较清楚。 3、Program配置 在Supervisord.conf中配置[include]下配置的files路径中,创建应用各自的program配置文件,举例官网http://www.supervisord.org/configuration.html 上的一个例子详细说明一下给参数的意义。![]() ![]() ![]() ![]() 以下是supervisord.conf 以下是supervisord_sshd.conf文件内容 以下是supervisord_httpd.conf文件内容 将上面文件放在一个目录下,并编译镜像 docker build -t centos6.8/webserver:0.1运行容器,注意-p后面映射的端口,在宿主机上必须没被占用 docker run -d -p 22:22 -p 9001:9001 -p 80:80 centos6.8/webserver:0.1容器启动之后,可以使用 宿主机ip:22 ssh访问容器 在web中打开http://宿主机IP:9001/ 访问Supervisor的WebUI 在这个页面中可以,对被管理的两个进程做一些常规的操作。 三、参考文档 http://www.supervisord.org/introduction.html 原文来自:云技术实战 本文地址:https://www.linuxprobe.com/docker-process-management1.html编辑:陶武杰,审核员:杨鹏飞 本文原创地址:https://www.linuxprobe.com/docker-process-management1.html编辑:public,审核员:暂无 为您推荐一些与本文相关的文章:搜狗服务器引擎Sogou C++ Workflow开源啦!GNOME 3.30 “Almeria”将于2018年9月6日发布Debian 10 “Buster”:支持自动安装安全升级Centos7.3编译RAID驱动(一)用 sar 工具检测系统性能瓶颈特朗普要求苹果海外代工厂搬回国内《扩展jQuery》pdf电子书免费下载Linus Torvalds 依然对 Linux 桌面充满信心RPM 的 spec 文件如何编写谷歌安装6000个交互发光按钮:由开源软件控制 相关文章[点此投稿]![]() ![]() ![]() ![]() ![]() 转载必需保留本文链接: https://www.linuxprobe.com/docker-process-management1.html 本文依据CC-BY-NC-SA 3.0协议发布,竭诚为读者提供Linux视频教程、Linux学习资料以及红帽考试资料等优质学习资源。 |
CopyRight 2018-2019 实验室设备网 版权所有 |