标签:supervisor
背景:
之前在容器中启动多个程序时,将启动命令写到一个脚本中,然后执行脚本,又因为执行脚本后,就退出了,没有启动1号进程(容器启动时需要保持Docker容器的1号进程始终运行,否则启动不成功),容器始终启动不起来,后来发现如果想运行多个程序的话,可以通过supervisord来操作,很容易实现。
Supervisor说明:
Supervisor是由python语言编写,基于linux操作系统的一款服务器管理工具,用以监控服务器的运行,发现问题能立即自动预警及自动重启等功能。
Supervisor要求管理的程序是非daemon程序,supervisord会帮你把它转成daemon程序。
简单操作如下:
Dockerfile:
FROM ubuntu:13.04 MAINTAINER ttxsgoto <359450323@qq.com> RUN apt-get update RUN apt-get install build-essential libxml2 python-dev libmysqld-dev openssh-server supervisor nginx ssh -y RUN pip install MySQL-python && pip install Django==1.8.11 ADD serverinfo /data/www/serverinfo ADD supervisord.conf /etc/supervisor/supervisord.conf EXPOSE 8080 22 80 RUN /etc/init.d/ssh stop RUN /etc/init.d/nginx stop CMD ["/usr/bin/supervisord","-c","/etc/supervisor/supervisord.conf"]
supervisord.conf
[supervisord] nodaemon=true #前端进行模式 [program:nginx] #command=nginx -g "daemon off;" command=/etc/init.d/nginx start [program:ssh] command=/etc/init.d/ssh start [program:serverinfo] command=python manage.py runserver 0.0.0.0:8080 #设置执行的命令 directory=/data/www/serverinfo #设置命令执行目录 stdout_logfile=/var/log/serverinfo.log #设置日志文件 autostart=true #是否随supervisord进程启动而启动,包括reloadconf autorestart=true #当挂掉后,自动重启 redirect_stderr=true #是否重定向std err stopsignal=QUIT #被监控程序kill的信号
build&run
docker build -t ttxsgoto.supervisor/v2016 .
docker run -it -d -p 8080:8080 -p 80:80 -p 24:22 --name supervisor.v2016 ttxsgoto.supervisor/v2016
docker ps #查看容器状态
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ee38e4aa48f8 ttxsgoto.supervisor/v2016 "/usr/bin/supervisor 4 seconds ago Up 3 seconds 0.0.0.0:80->80/tcp, 0.0.0.0:2222->22/tcp, 0.0.0.0:8080->8080/tcp supervisor.v2016
docker exec -it ee38e4aa48f8 /bin/bash #进入容器查看
root@ee38e4aa48f8:/# netstat -nltp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 37/python tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 29/nginx tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 34/sshd tcp6 0 0 :::80 :::* LISTEN 29/nginx tcp6 0 0 :::22 :::* LISTEN 34/sshd
此时启动的Django,nginx,ssh应用都已启动成功。
本文出自 “天天向上goto” 博客,请务必保留此出处http://ttxsgoto.blog.51cto.com/4943095/1839026
标签:supervisor
原文地址:http://ttxsgoto.blog.51cto.com/4943095/1839026