Using Supervisor with Docker

Using Supervisor with Docker

Note: - If you don‘t like sudo then see Giving
non-root access

Traditionally a Docker container runs a single process when it is launched, for example an Apache daemon or a SSH server daemon. Often though you want to run more than one process in a container. There are a number of ways you can achieve this ranging from
using a simple Bash script as the value of your container‘s CMD instruction
to installing a process management tool

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

In this example we‘re going to make use of the process management tool, Supervisor, to manage multiple processes in our container. Using Supervisor allows us
to better control, manage, and restart the processes we want to run. To demonstrate this we‘re going to install and manage both an SSH daemon and an Apache daemon.

这个例子里面我们使用进程管理工具supervisor来管理容器中的多个进程。使用Supervisor可以更好的控制、管理、重启我们希望运行的进程。在这里我们演示一下如何同时使用ssh和apache服务。

Creating a Dockerfile

创建一个dockerfile

Let‘s start by creating a basic Dockerfile for
our new image.

从dockerfile创建一个心的image

FROM ubuntu:13.04
MAINTAINER [email protected].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

Installing Supervisor

安装supervisor

We can now install our SSH and Apache daemons as well as Supervisor in our container.

安装  ssh apache supervisor

RUN apt-get install -y openssh-server apache2 supervisor
RUN mkdir -p /var/run/sshd
RUN mkdir -p /var/log/supervisor

Here we‘re installing the openssh-serverapache2 and supervisor (which
provides the Supervisor daemon) packages. We‘re also creating two new directories that are needed to run our SSH daemon and Supervisor.

这里安装3个软件,还创建了2个用来允许ssh和supervisor的目录

Adding Supervisor‘s configuration file

添加supervisor‘s的配置文件

Now let‘s add a configuration file for Supervisor. The default file is called supervisord.conf and
is located in /etc/supervisor/conf.d/.

添加配置文件到对应目录下面

COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf

Let‘s see what is inside our supervisord.conf file.

配置文件内容

[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"

The supervisord.conf configuration
file contains directives that configure Supervisor and the processes it manages. The first block [supervisord] provides
configuration for Supervisor itself. We‘re using one directive, nodaemon which
tells Supervisor to run interactively rather than daemonize.

配置文件包含目录和进程,第一段supervsord配置软件本身,使用nodaemon参数来运行。

The next two blocks manage the services we wish to control. Each block controls a separate process. The blocks contain a single directive, command,
which specifies what command to run to start each process.

下面2段包含我们要控制的2个服务。每一段包含一个服务的目录和启动这个服务的命令

Exposing ports and running Supervisor

映射端口,开启supervisor

Now let‘s finish our Dockerfile by
exposing some required ports and specifying the CMD instruction
to start Supervisor when our container launches.

使用dockerfile来映射指定的端口,使用cmd来启动supervisord

EXPOSE 22 80
CMD ["/usr/bin/supervisord"]

Here We‘ve exposed ports 22 and 80 on the container and we‘re running the /usr/bin/supervisordbinary
when the container launches.

这里我们映射了22 和80端口,使用supervisord的可执行路径启动服务。

Building our image

创建我们的image

We can now build our new image.

$ sudo docker build -t <yourname>/supervisord .

Running our Supervisor container

启动我们的supervisor容器

Once We‘ve got a built image we can launch a container from it.

启动我们创建的容器

$ 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
. . .

We‘ve launched a new container interactively using the docker
run
 command. That container has run Supervisor and launched the SSH and Apache daemons with it. We‘ve specified the -p flag
to expose ports 22 and 80. From here we can now identify the exposed ports and connect to one or both of the SSH and Apache daemons.

使用docker run来启动我们创建的容器。使用多个-p 来映射多个端口,这样我们就能同时访问ssh和apache服务了。

Using Supervisor with Docker

时间: 2024-10-26 03:06:05

Using Supervisor with Docker的相关文章

【云计算】使用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

Docker Resources

Menu Main Resources Books Websites Documents Archives Community Blogs Personal Blogs Videos Related Projects OS Virtual Machine Competitors Management Tools Paas Platforms Integration Projects Monitoring Networking Continuous Integration Development

supervisor进程管理程序

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

Supervisor-容器中启动多个程序

背景: 之前在容器中启动多个程序时,将启动命令写到一个脚本中,然后执行脚本,又因为执行脚本后,就退出了,没有启动1号进程(容器启动时需要保持Docker容器的1号进程始终运行,否则启动不成功),容器始终启动不起来,后来发现如果想运行多个程序的话,可以通过supervisord来操作,很容易实现. Supervisor说明: Supervisor是由python语言编写,基于linux操作系统的一款服务器管理工具,用以监控服务器的运行,发现问题能立即自动预警及自动重启等功能. Supervisor

jstorm的cgroup资源隔离机制

本文研究一下jstorm使用cgroup做资源隔离的情况,github有文档: https://github.com/alibaba/jstorm/wiki/%E8%B5%84%E6%BA%90%E7%A1%AC%E9%9A%94%E7%A6%BB 这个文档告诉你怎么开启cgroup,但对于不太了解cgroup和jstorm细节的同学可能更有兴趣看一下到底是怎么隔离的. 废话少说,你不是告诉我cgroup做资源隔离吗?你回答我两个问题: 1.什么是cgroup 2.jstorm怎么用cgroup

为什么需要自定义一个基础镜像?

开始之前 为什么需要自定义一个PHP基础镜像? 对于使用php (python)等开发的项目,由于是解释型语言并不需要编译代码这个步骤(go或者java将依赖打包到可执行程序或包中),但是往往还需要安装一些依赖的库或者第三方模块. 在项目实践中一般会先在PHP官方镜像之上,添加项目一些必用扩展模块,例如连接 mysql数据库的 mysqlnd 模块,或者连接 redis.memcache.mongodb 等常用的php扩展模块,以项目实际需求为准. 基础镜像作用是为项目镜像提供支持,准备好php

Docker Supervisor

Docker 容器在启动的时候开启单个进程,比如,一个 ssh 或者 apache 的 daemon 服务.但我们经常需要在一个机器上开启多个服务,这可以有很多方法,最简单的就是把多个启动命令放到一个启动脚本里面,启动的时候直接启动这个脚本. 例如:docker  run  –d  镜像  /run.sh 另外就是安装进程管理工具. 本次将使用进程管理工具 supervisor 来管理容器中的多个进程.使用 Supervisor 可以更好的控制.管理.重启我们希望运行的进程. Superviso

docker supervisor管理进程

一.使用supervisor来管理 supervisor:进程管理工具,基于C/S架构.(其提供web接口给用户查询和 控制),它允许用户去监控和控制在类unix系统的进程. 使用supervisor可以更好的控制.管理.重启我们希望运行的进程. 在这演示一下如何同时使用ssh和 apache 服务.(通过docker buid生成新镜像) 配置 1.首先创建一个dockerfile目录 dockerfile文件内容 supervisor配置文件内容 第一段supervsord配置软件本身,使用

supervisor工具实现自动化docker服务运行

Supervisor工具实现自动化docker服务运行 一.使用 Supervisor 来管理进程 Docker 容器在启动的时候开启单个进程,比如,一个 ssh 或者 apache 的 daemon 服务.但我们经常需要在一个机器上开启多个服务,这可以有很多方法,最简单的就是把多个启动命令放到一个启动脚本里面,启动的时候直接启动这个脚本. 例如:docker  run  –d  镜像  /run.sh 另外就是安装进程管理工具. 本节将使用进程管理工具 supervisor 来管理容器中的多个