Supervisor-容器中啓動多個程序

背景:

  之前在容器中啓動多個程序時,將啓動命令寫到一個腳本中,然後執行腳本,又因爲執行腳本後,就退出了,沒有啓動1號進程(容器啓動時需要保持Docker容器的1號進程始終運行,否則啓動不成功),容器始終啓動不起來,後來發現如果想運行多個程序的話,可以通過supervisord來操作,很容易實現。


Supervisor說明:

  Supervisor是由python語言編寫,基於linux操作系統的一款服務器管理工具,用以監控服務器的運行,發現問題能立即自動預警及自動重啓等功能。

  Supervisor要求管理的程序是非daemon程序,supervisord會幫你把它轉成daemon程序。


簡單操作如下:

Dockerfile:

FROM ubuntu:13.04
MAINTAINER ttxsgoto <[email protected]>
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 2222: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應用都已啓動成功。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章