Docker Skill 101-Skill 006-Supervisor管理容器内服务

Docker Skill 101 - Skill 006 - Supervisor管理容器内服务

环境背景:

当容器内需要启动多个进程的时候,我们需要一个简单高效的方法。也许大家会说,用shell脚本管理子进程启动,这是一种解决方法,但也是一种无耐的选择,很多前人已经告警过这样并不好,所以今天我们将讨论另一种方式-Supervisor。Supervisor是一个客户/服务器系统,它可以在类Unix系统中管理控制大量进程。Supervisor使用python开发,有多年历史,目前很多生产环境下的服务器都在使用Supervisor。

提出问题:

如何在容器内管理多个进程

解决方案:

Supervisor管理容器内服务。

实际操作:

第一步:

准备镜像,我们需要Tomcat和Apache Web服务器的容器,然后用Supervisor以托管的方式启动。

第二步:

准备Dockerfile

FROM ubuntu:14.04
RUN apt-get update && apt-get install -y python-pip apache2 tomcat7
ENV DEBIAN_FRONTEND noninteractive

RUN pip install supervisor
RUN mkdir -p /var/lock/apache2
RUN mkdir -p /var/run/apache2
RUN mkdir -p /var/log/tomcat
RUN echo_supervisord_conf > /etc/supervisord.conf
ADD ./supervisord_add.conf /tmp/supervisord_add.conf
RUN cat /tmp/supervisord_add.conf >> /etc/supervisord.conf
RUN rm /tmp/supervisord_add.conf
CMD ["supervisord","-c","/etc/supervisord.conf"]

第三步:

准备supervisord_add.conf

[supervisord]
nodaemon=true

# apache
[program:apache2]
command=/bin/bash -c "source /etc/apache2/envvars && exec /usr/sbin/apache2 -DFOREGROUND"

# tomcat
[program:tomcat]
command=service start tomcat
redirect_stderr=true
stdout_logfile=/var/log/tomcat/supervisor.log
stderr_logfile=/var/log/tomcat/supervisor.error_log

第四步:

构建镜像

docker build -t supervised .

第五步:

docker run -p 9000:80 --name supervised supervised

Docker Skill 101-Skill 006-Supervisor管理容器内服务

Docker Skill 101-Skill 006-Supervisor管理容器内服务


分享到:


相關文章: