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
閱讀更多 崔格拉斯 的文章