Using Supervior with Docker ==== 注意:如果你不喜欢使用sudo,那么你可以看看Giving non-root access 传统上的docker容器中一次只能运行一个进程,例如一次只运行一个Apache守护进程或SSH服务器守护进程一个进程。你经常遇到需要 在一个容器中运行多个进程的情形。有许多方法可以实现这一点,从使用简单的bash脚本来运行的 指令到安装进程管理工具。 在这个例子中,我们将要利用进程管理工具, ,来管理我们容器中的多个进程。使用Supervior使我们能够更好地控制,管理, 和重新启动我们想要运行的进程。为了证明这一点,我们接下来要安装并管理的SSH服务进程和一个Apache守护进程。
注意:如果你不喜欢使用sudo,那么你可以看看Giving non-root access
传统上的docker容器中一次只能运行一个进程,例如一次只运行一个Apache守护进程或SSH服务器守护进程一个进程。你经常遇到需要
在一个容器中运行多个进程的情形。有许多方法可以实现这一点,从使用简单的bash脚本来运行的CMD指令到安装进程管理工具。
在这个例子中,我们将要利用进程管理工具,Supervior,来管理我们容器中的多个进程。使用Supervior使我们能够更好地控制,管理,
和重新启动我们想要运行的进程。为了证明这一点,我们接下来要安装并管理的SSH服务进程和一个Apache守护进程。
让我们先创建一个基本的Dockerfile来创建我们的新镜像。
FROM ubuntu:13.04 MAINTAINER examples@docker.com RUN echo "deb http://archive.ubuntu.com/ubuntu precise main universe" > /etc/apt/sources.list RUN apt-get update RUN apt-get upgrade -y
现在,我们可以安装我们的SSH和Apache,以及Supervisor在我们的容器中。
RUN apt-get install -y openssh-server apache2 supervisor RUN mkdir -p /var/run/sshd RUN mkdir -p /var/log/supervisor
这里我们组装了一个包含Openssh-server,Apache2和supervisor(它提供了超级守护进程)的封装包。我们也创建了用来运行
我们SSH和Supervisor的两个新目录
现在,让我们为Supervisor添加一个配置文件。默认的文件名为supervisord.conf,位于/etc/supervisor/conf.d/。
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
让我们来看看supervisord.conf文件。
[supervisord] nodaemon=true [program:sshd] command=/usr/sbin/sshd -D [program:apache2] command=/bin/bash -c "source /etc/apache2/envvars && exec /usr/sbin/apache2 -DFOREGROUND"
该supervisord.conf配置文件包含了配置Supervisor的指令和Supervisor用来管理进程的指令。第一部分[supervisord]为Supervisor本身的配置。
我们使用一个nodaemon指令,来告诉Supervisor以交互方式而非以后台进程方式运行。
接下来的两个部分用来管理我们要控制的服务。每个部分控制一个单独的进程。该部分包含一个command指令,指定用什么命令来启动每个过程。 (译者注:要运行什么指令按照相同格式添加即可)
现在,让我们开放一些需要口,并指定当容器启动时要运行的CMD指令来结束Dockerfile文件。
EXPOSE 22 80 CMD ["/usr/bin/supervisord"]
在这里,当我们的容器启动时,会自动开放了容器的22和80端口,同时运行/usr/bin/supervisord命令。
现在,我们可以创建我们的新镜像。
$ sudo docker build -t <yourname>/supervisord .
一旦我们创建了一个镜像,我们就可以从它启动一个容器。
$ sudo docker run -p 22 -p 80 -t -i <yourname>/supervisord 2013-11-25 18:53:22,312 CRIT Supervisor running as root (no user in config file) 2013-11-25 18:53:22,312 WARN Included extra file "/etc/supervisor/conf.d/supervisord.conf" during parsing 2013-11-25 18:53:22,342 INFO supervisord started with pid 1 2013-11-25 18:53:23,346 INFO spawned: 'sshd' with pid 6 2013-11-25 18:53:23,349 INFO spawned: 'apache2' with pid 7 . . .
我们已经使用docker run命令以交互方式启动一个新的容器。该容器已运行Supervisor,并启动了SSH和Apache后台进程。
我们已经指定了-p参数开放了端口22和80。通过这种方式我们可以确认我们开放的端口,并且通过这些端口连接到SSH和Apache后台进程。