ニュース
» 2016年02月17日 08時00分 公開

古賀政純の「攻めのITのためのDocker塾」:第16回 1つのDockerコンテナでサービスをたくさん動かすには?(応用編) (2/3)

[古賀政純(日本ヒューレット・パッカード),ITmedia]

複数のサービスを起動させる方法・Supervisor

 複数のサービスを稼働させるために、ラッパースクリプトを使わない方法もあります。その一つが、「Supervisor」(スーパーバイザ)と呼ばれるソフトウェアの導入です。

 Supervisorは、複数のプロセスをまとめて管理するもので、プロセスの死活監視、プロセスのログの取得、プロセスの再起動などが行えます。元々はプロセス管理のソフトウェアですので、非Docker環境においても利用でき、複数のプロセスを同時にバックグラウンドで稼働させ、かつ、監視したい場合に有用です。特にDocker環境では複数のデーモンをコンテナ内で同時稼働させるツールとして、広く利用されています。

 Supervisorは、稼働させたいサービスを「/etc/supervisord.conf」ファイルに記述します。以下は、httpdデーモンとvsftpdデーモンを同時に稼働させる場合の「/etc/supervisord.conf」ファイルの例です。


# cat supervisord.conf
[supervisord]
nodaemon=true
 
[program:httpd]
command=/usr/sbin/httpd -k start
 
[program:vsftpd]
command=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf

 上記の設定例ではhttpdとvsftpdの起動に関する処理を1つのsupervisord.confファイルに記述していますが、サービスごとに設定ファイルを分けて記述し、「/etc/supervisord.conf」ファイルからサービスごとの設定ファイルをロードする方法もあります。Supervisorの設定ファイルに関する情報はこちらのWebサイトにあります。監視対象となるプロセスを細かく制御できますので、ご一読をお勧めします。

 Docker環境の場合、コンテナにSupervisorをインストールし、あらかじめ用意しておいた上記のsupervisord.confファイルをコンテナ内の/etcディレクトリにコピーするのが一般的です。以下に、Supervisorでhttpdとvsftpdを同時に稼働させるDockerfileを示します。上記のsupervisord.confファイルは、Dockerfileと同じディレクトリに用意してください。


# mkdir /root/supervisor_httpd_vsftpd
# cd /root/supervisor_httpd_vsftpd
# vi Dockerfile
FROM centos:centos7.2.1511
MAINTAINER Masazumi Koga
ENV container docker
ENV http_proxy http://proxy.proxy.your.site.com:8080
ENV https_proxy http://proxy.proxy.your.site.com:8080
RUN yum update -y && yum clean all
RUN yum install -y epel-release
RUN yum install -y supervisor iproute httpd vsftpd && yum clean all
RUN echo "Hello Apache." > /var/www/html/test1.html
RUN echo "Hello Vsftpd." > /var/ftp/pub/test2.txt
COPY supervisord.conf /etc/
EXPOSE 80
ENTRYPOINT ["/usr/bin/supervisord"]

 このDockerfileでは、ホストOS上に用意したsupervisord.confファイルをコンテナ内の/etcディレクトリにCOPYを使ってコピーしています。また、ENTRYPOINTで「/usr/bin/supervisord」を指定することにより、コンテナ起動時に「/usr/bin/supervisord」が起動します。すると、コンテナ内の「/etc/supervisord.conf」ファイルに記載されたサービス群(今回はhttpdデーモンとvsftpdデーモン)が起動します。実際にコンテナを起動し、プロセスを確認してみてください。


# pwd
/root/supervisord_httpd_vsftpd
# docker build -f ./Dockerfile -t centos:c7apache_ftp01 --no-cache=false .
# docker run -itd --name web0003 centos:c7apache_ftp01
# docker exec -it web0003 ps -ef

図:Supervisorを使ったサービスの起動

Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ