2017年6月19日 星期一

[ 文章收集 ] 使用 Supervisor 來管理程式 (CentOS7)

Source From Here
使用 Supervisor 來管理程式
Docker 容器在啟動的時候開啟單個程式,比如,一個 ssh 或者 apache 的 daemon 服務。但我們經常需要在一個機器上開啟多個服務,這可以有很多方法,最簡單的就是把多個啟動命令方到一個啟動腳本裡面,啟動的時候直接啟動這個腳本,另外就是安裝程式管理工具。本小節將使用程式管理工具 supervisor 來管理容器中的多個程式。使用 Supervisor 可以更好的控制、管理、重啟我們希望執行的程式。在這裡我們演示一下如何同時使用 ssh 和 apache 服務

設定
首先建立一個 Dockerfile,內容和各部分的解釋以下:
  1. FROM johnklee/centos7_tensorflow  
  2. MAINTAINER puremonkey2007@gmail.com  
  3. RUN yum -y update  
  4. RUN yum -y upgrade  
  5. RUN mkdir -p /var/run/sshd  
  6. RUN mkdir -p /var/log/supervisor  
安裝 supervisor
安裝 ssh、apache 和 supervisor:
  1. RUN yum install -y openssh* apache2  
  2. RUN yum install -y python-setuptools  
  3. RUN easy_install supervisor  
這裡安裝 3 個軟件,還建立了 2 個 ssh 和 supervisor 服務正常執行所需要的目錄. 接著:
  1. COPY supervisord.conf /etc/supervisord.conf  
新增 supervisord 的設定檔案,並複製設定檔案到對應目錄下面.
  1. EXPOSE 22 80  
  2. CMD ["/usr/bin/supervisord"]  
這裡我們映射了 22 和 80 連接埠,使用 supervisord 的可執行路徑啟動服務。完整 Dockerfile 內容如下:
- Dockerfile
  1. FROM johnklee/centos7_tensorflow  
  2. MAINTAINER puremonkey2007@gmail.com  
  3. RUN yum -y update  
  4. RUN yum -y upgrade  
  5.   
  6. RUN yum install -y openssh* apache2  
  7. RUN yum install -y python-setuptools  
  8. RUN easy_install supervisor  
  9. RUN mkdir -p /var/run/sshd  
  10. RUN mkdir -p /var/log/supervisor  
  11.   
  12. COPY supervisord.conf /etc/supervisord.conf  
  13.   
  14. EXPOSE 22 80  
  15. CMD ["/usr/bin/supervisord"]  

supervisor 設定檔案內容
  1. [supervisord]  
  2. nodaemon=true  
  3.   
  4. [program:sshd]  
  5. command=/usr/sbin/sshd -D  
  6.   
  7. [program:apache2]  
  8. command=/bin/bash -c "source /etc/apache2/envvars && exec /usr/sbin/apache2 -DFOREGROUND"  
設定檔案包含目錄和程式,第一段 supervsord 設定軟件本身,使用 nodaemon 參數來執行。第二段包含要控制的 2 個服務。每一段包含一個服務的目錄和啟動這個服務的命令。

使用方法
首先利用上面的 Dockerfile 建立映像檔:
# docker build -t test/supervisord . 
# docker images | grep test/supervisord // 檢視 image 有成功建立 
test/supervisord latest e5966a036693 18 hours ago 244.8 MB

接著啟動 supervisor 容器:
# docker run -p 22 -p 80 -t -i test/supervisord
2015-05-15 02:43:19,546 CRIT Supervisor running as root (no user in config file)
2015-05-15 02:43:19,546 WARN Included extra file "/etc/supervisor/conf.d/supervisord.conf" during parsing
2015-05-15 02:43:19,570 INFO RPC interface 'supervisor' initialized
 ...

使用 docker run 來啟動我們建立的容器。使用多個 -p 來映射多個連接埠,這樣我們就能同時存取 ssh 和 apache 服務了。可以使用這個方法建立一個只有 ssh 服務的基礎映像檔,之後建立映像檔可以使用這個映像檔為基礎來建立其他服務。

Supplement
在 Centos7上使用 systemd 啟動 supevisor 
Supervisord: Restarting and Reloading 
How to control your deamon with Supervisord (On CentOS)
Running Supervisor
This section makes reference to explain how to run the supervisord and supervisorctl commands...


沒有留言:

張貼留言

[Git 常見問題] error: The following untracked working tree files would be overwritten by merge

  Source From  Here 方案1: // x -----删除忽略文件已经对 git 来说不识别的文件 // d -----删除未被添加到 git 的路径中的文件 // f -----强制运行 #   git clean -d -fx 方案2: 今天在服务器上  gi...