Docker 使用 Supervisor 来管理进程操作
Docker容器在启动的时候开启单个进程,比如,一个ssh或者apache的daemon服务。
但我们经常需要在一个机器上开启多个服务,这可以有很多方法,最简单的就是把多个启动命令放到一个启动脚本里面,启动的时候直接启动这个脚本,另外就是安装进程管理工具。
本小节将使用进程管理工具supervisor来管理容器中的多个进程。使用Supervisor可以更好的控制、管理、重启我们希望运行的进程。在这里我们演示一下如何同时使用ssh和apache服务。
配置
首先创建一个Dockerfile,内容和各部分的解释如下。
FROMubuntu:13.04 MAINTAINERexamples@docker.com RUNecho"debhttp://archive.ubuntu.com/ubuntuprecisemainuniverse">/etc/apt/sources.list RUNapt-getupdate RUNapt-getupgrade-y
安装ssh、apache和supervisor
RUNapt-getinstall-yopenssh-serverapache2supervisor RUNmkdir-p/var/run/sshd RUNmkdir-p/var/log/supervisor
这里安装3个软件,还创建了2个ssh和supervisor服务正常运行所需要的目录。
COPYsupervisord.conf/etc/supervisor/conf.d/supervisord.conf
添加supervisord的配置文件,并复制配置文件到对应目录下面。
EXPOSE2280
CMD["/usr/bin/supervisord"]
这里我们映射了22和80端口,使用supervisord的可执行路径启动服务。
supervisor配置文件内容
[supervisord] nodaemon=true [program:sshd] command=/usr/sbin/sshd-D [program:apache2] command=/bin/bash-c"source/etc/apache2/envvars&&exec/usr/sbin/apache2-DFOREGROUND"
配置文件包含目录和进程,第一段supervsord配置软件本身,使用nodaemon参数来运行。第二段包含要控制的2个服务。每一段包含一个服务的目录和启动这个服务的命令。
使用方法
创建镜像。
$sudodockerbuild-ttest/supervisord.
启动supervisor容器。
$sudodockerrun-p22-p80-t-itest/supervisords 2013-11-2518:53:22,312CRITSupervisorrunningasroot(nouserinconfigfile) 2013-11-2518:53:22,312WARNIncludedextrafile"/etc/supervisor/conf.d/supervisord.conf"duringparsing 2013-11-2518:53:22,342INFOsupervisordstartedwithpid1 2013-11-2518:53:23,346INFOspawned:'sshd'withpid6 2013-11-2518:53:23,349INFOspawned:'apache2'withpid7
使用dockerrun来启动我们创建的容器。使用多个-p来映射多个端口,这样我们就能同时访问ssh和apache服务了。
可以使用这个方法创建一个只有ssh服务的基础镜像,之后创建镜像可以使用这个镜像为基础来创建。
以上这篇Docker使用Supervisor来管理进程操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。