天天看點

Supervisor 來管理程序

一、使用 Supervisor 來管理程序

Docker 容器在啟動的時候開啟單個程序,比如,一個 ssh 或者 apache 的 daemon 服務。但我們經常需要在一個機器上開啟多個服務,這可以有很多方法,最簡單的就是把多個啟動指令放到一個啟動腳本裡面,啟動的時候直接啟動這個腳本。

例如:docker  run  –d  鏡像  /run.sh

另外就是安裝程序管理工具。

本節将使用程序管理工具 supervisor 來管理容器中的多個程序。使用 Supervisor 可以更好的控制、管理、重新開機我們希望運作的程序。

Supervisor是一個程序控制系統. 它是一個C/S系統(注意: 其提供WEB接口給使用者查詢和控制), 它允許使用者去監控和控制在類UNIX系統的程序。

在這裡我們示範一下如何同時使用 ssh 和 apache 服務。

配置

首先建立一個 Dockerfile,内容和各部分的解釋如下。

建立一個dockerfile的目錄

<code>[root@localhost /]</code><code># mkdir -p /docker/apache</code>

<code>[root@localhost /]</code><code># cd /docker/apache/</code>

dockerfile檔案内容

<code>FROM docker.wang.com</code><code>/centos</code><code>:centos7</code>

<code>MAINTAINER from [email protected]</code>

<code>RUN yum -y </code><code>install</code> <code>openssh-server </code><code>sudo</code> <code>httpd</code>

<code>RUN </code><code>useradd</code> <code>admin</code>

<code>RUN </code><code>echo</code> <code>"admin:admin"</code> <code>| chpasswd</code>

<code>RUN </code><code>echo</code> <code>"admin ALL=(ALL) ALL"</code> <code>&gt;&gt; </code><code>/etc/sudoers</code>

<code>RUN </code><code>ssh</code><code>-keygen -t dsa -f </code><code>/etc/ssh/ssh_host_dsa_key</code>

<code>RUN </code><code>ssh</code><code>-keygen -t rsa -f </code><code>/etc/ssh/ssh_host_rsa_key</code>

<code>RUN </code><code>ssh</code><code>-keygen -t ed25519 -f </code><code>/etc/ssh/ssh_host_ed25519_key</code>

<code>RUN </code><code>ssh</code><code>-keygen -t ecdsa -f </code><code>/etc/ssh/ssh_host_ecdsa_key</code>

<code>RUN </code><code>mkdir</code> <code>-p </code><code>/var/run/sshd</code>

<code>RUN </code><code>mkdir</code> <code>-p </code><code>/home/admin/</code><code>.</code><code>ssh</code>

<code>RUN </code><code>sed</code> <code>-ri </code><code>'s/session    required     pam_loginuid.so/#session    required     pam_loginuid.so/g'</code> <code>/etc/pam</code><code>.d</code><code>/sshd</code>

<code>RUN </code><code>sed</code> <code>-ri </code><code>'s/#ServerName www.example.com:80/ServerName www.benet.com/g'</code> <code>/etc/httpd/conf/httpd</code><code>.conf</code>

<code>COPY supervisord.conf </code><code>/etc/supervisor/supervisord</code><code>.conf</code>

<code>EXPOSE 22 80 443</code>

<code>CMD [</code><code>"/bin/bash"</code><code>,</code><code>"/run.sh"</code><code>]</code>

supervisor  配置檔案内容

<code>[supervisord]</code>

<code>nodaemon=</code><code>true</code>

<code>[program:sshd]</code>

<code>command</code><code>=</code><code>/usr/sbin/sshd</code> <code>-D</code>

<code> </code> 

<code>[program:httpd]</code>

<code>command</code><code>=</code><code>/usr/sbin/httpd</code> <code>-DFOREGROUND</code>

第一段 supervsord 配置軟體本身,使用 nodaemon 參數來運作。nodaemon=true 如果是true,supervisord程序将在前台運作,預設為false,也就是背景以守護程序運作。

下面2段包含我們要控制的 2 個服務。每一段包含一個服務的目錄和啟動這個服務的指令

/docker/apache目錄内容清單

[root@localhost apache]# ls

dockerfile  supervisord.conf

使用方法

建立 image

# docker build -t centos:supervisord  .

[root@localhost apache]# docker build -t centos:supervisord .

檢視鏡像

<a href="https://s1.51cto.com/wyfs02/M00/A4/61/wKioL1mpW5nTA6fLAAAu7Kh9RbU038.png-wh_500x0-wm_3-wmp_4-s_2805447917.png" target="_blank"></a>

啟動我們的 supervisor 容器

[root@localhost docker]# docker run -p 10122:22 -p 80:80 -d centos:supervisord

9f938cb6a9ab943d6936d08a8c0533084b8ba9ca2791c33fd42439e67143474d

測試:通路容器提供的web和ssh服務

<a href="https://s5.51cto.com/wyfs02/M02/A4/61/wKioL1mpW67RXgOiAABI-nw2pp0721.png-wh_500x0-wm_3-wmp_4-s_2648866910.png" target="_blank"></a>

     本文轉自柴鑫旺 51CTO部落格,原文連結:http://blog.51cto.com/chaixinwang/1962047,如需轉載請自行聯系原作者