docker之使用supervisor管理多个进程

docker题外话:

centos7安装supervisor:

源码编译安装:

下载源码文件:supervisor-3.3.1.tar.gz
下载地址:https://pypi.python.org/pypi/supervisor
安装:
[[email protected] src]# tar -zxf supervisor-3.3.1.tar.gz
[[email protected] src]# cd supervisor-3.3.1/
[[email protected] supervisor-3.3.1]# python setup.py install

检查是否安装成功:
登陆python控制台输入import supervisor 查看是否能成功加载
[[email protected] supervisor-3.3.1]# python
Python 2.7.5 (default, Sep 15 2016, 22:37:39) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-4)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import supervisor
>>>
生成配置文件:
[[email protected] supervisor-3.3.1]# mkdir /etc/supervisor
[[email protected] supervisor-3.3.1]# echo_supervisord_conf > /etc/supervisor/supervisord.conf
 
[[email protected] supervisor-3.3.1]# grep -E -v ‘^;|^$‘ /etc/supervisor/supervisord.conf
[unix_http_server]
file=/tmp/supervisor.sock   ; (the path to the socket file)
[supervisord]
logfile=/tmp/supervisord.log ; (main log file;default $CWD/supervisord.log)
logfile_maxbytes=50MB        ; (max main logfile bytes b4 rotation;default 50MB)
logfile_backups=10           ; (num of main logfile rotation backups;default 10)
loglevel=info                ; (log level;default info; others: debug,warn,trace)
pidfile=/tmp/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
nodaemon=false               ; (start in foreground if true;default false)
minfds=1024                  ; (min. avail startup file descriptors;default 1024)
minprocs=200                 ; (min. avail process descriptors;default 200)
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
[supervisorctl]
serverurl=unix:///tmp/supervisor.sock ; use a unix:// URL  for a unix socket
启动服务:
[[email protected] tmp]# supervisord -c /etc/supervisor/supervisord.conf
 
关闭服务:
[[email protected] tmp]# supervisorctl shutdown
Shut down
 
查看状态:
[[email protected] tmp]# supervisorctl status

启动或停止某一个服务:
supervisorctl stop|start program_name

yum直接安装:

rpm -Uvh https://mirrors.ustc.edu.cn/fedora/epel/7/x86_64/e/epel-release-7-8.noarch.rpm
yum update;yum -y install supervisor
cat /etc/supervisord.conf

supervisord -c /etc/supervisord.conf


说明:

Docker 容器在启动的时候开启单个进程,比如,一个 ssh 或者 apache 的 daemon 服务。但我们经常需要在一个机器上开启多个服务,这可以有很多方法,最简单的就是把多个启动命令放到一个启动脚本里面,启动的时候直接启动这个脚本,另外就是安装进程管理工具

使用进程管理工具 supervisor 来管理容器中的多个进程。使用 Supervisor 可以更好的控制、管理、重启我们希望运行的进程

在这里我们演示一下容器中如何同时使用 ssh 和 tomcat 服务

配置:

首先创建Dockerfile文件:

[[email protected] shencj]# vim Dockerfile
 
# centos:ssh
#
# VERSION               0.0.1
 
FROM centos
MAINTAINER shencj "[email protected]"
 
#ssh
RUN yum install -y openssh openssh-server openssh-clients
RUN mkdir /var/run/sshd
RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key
RUN sed -i ‘s/#UseDNS yes/UseDNS no/g‘ /etc/ssh/sshd_config
RUN sed -i ‘s/GSSAPIAuthentication yes/GSSAPIAuthentication no/g‘ /etc/ssh/sshd_config
RUN /bin/echo ‘root:123456‘ |chpasswd
RUN /bin/sed -i ‘s/.*session.*required.*pam_loginuid.so.*/session optional pam_loginuid.so/g‘ /etc/pam.d/sshd
RUN /bin/echo -e "LANG=\"en_US.UTF-8\"" > /etc/default/local
 
#tomcat
ADD apache-tomcat-7.0.41.tar.gz /usr/local/src/
COPY jdk-7u80-linux-x64.rpm /usr/local/src/
WORKDIR /usr/local/src/
RUN rpm -ivh jdk-7u80-linux-x64.rpm
ENV JAVA_HOME /usr/java/jdk1.7.0_80
ENV PATH $PATH:$JAVA_HOME/bin
ENV CLASSPATH .:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
#RUN java -version
RUN mkdir -p /usr/local/tools
RUN cp -r apache-tomcat-7.0.41 /usr/local/tools/tomcat7_8080
 
#supervisor
RUN rpm -Uvh https://mirrors.ustc.edu.cn/fedora/epel/7/x86_64/e/epel-release-7-8.noarch.rpm
RUN yum update;yum -y install supervisor
RUN mkdir -p /etc/supervisor/
COPY supervisord.conf /etc/supervisor/
 
EXPOSE 22 8080
CMD supervisord -c /etc/supervisor/supervisord.conf
#CMD ["supervisord","-c","/etc/supervisor/supervisord.conf"]
[[email protected] shencj]# vim supervisord.conf 
 
[unix_http_server]
file=/var/run/supervisor/supervisor.sock   ; (the path to the socket file)
 
[supervisord]
logfile=/var/run/supervisor/supervisord.log ; (main log file;default $CWD/supervisord.log)
logfile_maxbytes=50MB        ; (max main logfile bytes b4 rotation;default 50MB)
logfile_backups=10           ; (num of main logfile rotation backups;default 10)
loglevel=info                ; (log level;default info; others: debug,warn,trace)
pidfile=/var/run/supervisor/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
nodaemon=true               ; (start in foreground if true;default false)
minfds=1024                  ; (min. avail startup file descriptors;default 1024)
minprocs=200                 ; (min. avail process descriptors;default 200)
 
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
 
[supervisorctl]
serverurl=unix:///var/run/supervisor/supervisor.sock ; use a unix:// URL  for a unix socket
 
[program:sshd]
command=/usr/sbin/sshd -D
 
[program:tomcat]
command=/usr/local/tools/tomcat7_8080/bin/catalina.sh run

注意

serverurl=unix:///var/run/supervisor/supervisor.sock : 这个建议不要修改

nodaemon=true : 设置为true

command=/usr/local/tools/tomcat7_8080/bin/catalina.sh run :这个必须这样写(supervisor管理tomcat必须这样启动,其他方式好像都有问题),参考:http://serverfault.com/questions/425132/controlling-tomcat-with-supervisor

创建镜像:

[[email protected] shencj]# docker build -t shencj/centos-ssh-tomcat:v1 .

运行容器:

[[email protected] shencj]# docker run -d --name ssh-tomcat --restart=always -p 4426:22 -p 82:8080 shencj/centos-ssh-tomcat:v1
cc8006c07f6c703c476c69ecc3699f0c9a1e5f456949e65a8e92b55dafa8be1e
[[email protected] shencj]#

查看容器:

[[email protected] shencj]# docker ps -a
CONTAINER ID        IMAGE                         COMMAND                  CREATED             STATUS              PORTS                                        NAMES
cc8006c07f6c        shencj/centos-ssh-tomcat:v1   "/bin/sh -c ‘supervis"   56 seconds ago      Up 54 seconds       0.0.0.0:4426->22/tcp, 0.0.0.0:82->8080/tcp   ssh-tomcat

登录容器:

[[email protected] shencj]# ssh localhost -p 4426
[email protected]‘s password: 
[[email protected] ~]# ps -ef 
UID         PID   PPID  C STIME TTY          TIME CMD
root          1      0  0 03:56 ?        00:00:00 /usr/bin/python /usr/bin/supervisord -c /etc/supervisor/supervisord.conf
root          7      1  0 03:56 ?        00:00:00 /usr/sbin/sshd -D
root          8      1  3 03:56 ?        00:00:03 /usr/java/jdk1.7.0_80/bin/java -Djava.util.logging.config.file=/usr/local/tools/tomcat7_8080/conf/logging.properties -Djava.util.logging.manager=org.apa
root         30      7  0 03:58 ?        00:00:00 sshd: [email protected]/0
root         32     30  0 03:58 pts/0    00:00:00 -bash
root         45     32  0 03:58 pts/0    00:00:00 ps -ef

[[email protected] ~]# supervisorctl status
sshd                             RUNNING   pid 7, uptime 0:02:58
tomcat                           RUNNING   pid 8, uptime 0:02:58


访问tomcat:

http://ip:82

时间: 2024-10-31 11:54:32

docker之使用supervisor管理多个进程的相关文章

Supervisor 管理后台守护进程

安装 pip install supervisor 启动 supervisord supervisord -c /etc/supervisord.conf supervisord 的配置文件默认位于 /etc/supervisord.conf,;后面为注释 关闭服务 supervisorctl stop all 先关闭supervisor启动脚本,之后再关闭supervisord服务 kill pid 配置 supervisord 配置 program 项的路径下:/etc/supervisor

【云计算】使用supervisor管理Docker多进程-ntpd+uwsgi+nginx示例最佳实践

supervisor安装启动: apt-get install supervisor -y # start supervisord nodaemon /usr/bin/supervisord --nodaemon nginx示例: [program:nginx] command = /usr/sbin/nginx -g 'daemon off;' process_name = %(program_name)s stopsignal = QUIT autostart = true # starts

使用Supervisor管理进程二

supervisor安装完成后会生成三个执行程序:supervisortd.supervisorctl.echo_supervisord_conf,分别是supervisor的守护进程服务(用于接收进程管理命令).客户端(用于和守护进程通信,发送管理进程的指令).生成初始配置文件程序. 3.配置 运行supervisord服务的时候,需要指定supervisor配置文件,如果没有显示指定,默认在以下目录查找: $CWD/supervisord.conf$CWD/etc/supervisord.c

celery和supervisor配合使用,实现supervisor管理celery进程

在这里我选择redis作为celery异步任务的中间人,系统选择CentOS6.5 64位.redis.celery和supervisor的安装参见官方文档. 安装完毕后: 1, 创建celery的实例/home/user_00/learn/tasks.py文件 tasks.py: # -*-coding:utf-8-*- from celery import Celery, platforms app = Celery('tasks', backend='redis://localhost:6

【Python】使用Supervisor来管理Python的进程

1.问题描述 需要一个python的服务程序在后台一直运行,不能让该进程被杀死,即使被杀死也要能及时自动重启.如:有一个python的程序:test.py ,通过命令:python test.py来运行程序,但是它会受命令行的中断而中断.所以我们需要一个方法来保证该程序一直在后台运行. 2.解决方法 以前经常用命令:nohup python test.py & 来保证其在后台运行不中断,但是这也不能保证一直运行. 下面介绍用supervisor来管理python的进程,保证其在后台一直运行不中断

supervisor 管理uwsgi 进程

Supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动 重启.它是通过fork/exec的方式把这些被管理的进程当作supervisor的子进程来启动,这样只要在supervisor的配置文件中,把要 管理的进程的可执行文件的路径写进去即可.也实现当子进程挂掉的时候,父进程可以准确获取子进程挂掉的信息的,可以选择是否自己启动和报警 安装: Supervisor是python2写就的一款强大的运维工具(其实现

Docker背后的容器管理——Libcontainer深度解析

Libcontainer 是Docker中用于容器管理的包,它基于Go语言实现,通过管理namespaces.cgroups.capabilities以及文件系统来进行容器控制.你可以使用Libcontainer创建容器,并对容器进行生命周期管理. 容器是一个可管理的执行环境,与主机系统共享内核,可与系统中的其他容器进行隔离. 在2013年Docker刚发布的时候,它是一款基于LXC的开源容器管理引擎.把LXC复杂的容器创建与使用方式简化为Docker自己的一套命令体系.随着Docker的不断发

如何使用supervisor管理你的应用

1.前言 Supervisor(http://supervisord.org/)是用Python开发的一个client/server服务,是UNIX-like系统下的一个进程管理工具,不支持Windows系统.它可以很方便的监听.启动.停止.重启一个或多个进程. 提供的高可用场景,当你的程序出现异常,例如core/内存溢出等,导致服务进程被杀死,这个时候supervisort监听到进程终止后,会自动将它重新拉起. 2.安装 supervisor是基于python开发的,所以安装时首先要保证有py

supervisor管理后台进程

在linux中supervisor是用来管理后台进程的,是一个用python写的进程管理工具,可以让宕机的进程重启.这里我们大概讲一下用他来管理uWSGI. 一.安装supervisor 1.python2下的安装 supervisor不支持python3,所以你安装可以使用自带的python2安装,但是自带的python2没有安装pip (1)要安装pip,首先要安装setuptools wget https://pypi.python.org/packages/ff/d4/209f4939c