Supervisorと並んで、複数のプロセスの起動・監視を行うソフトウェアに「Monit」があります。MonitもSupervisorと同じく、非Docker環境でも利用可能です。Webブラウザ経由でサービスの起動、停止、監視の有効化、無効化を設定することもできます。
実際にMonitを使ってDockerコンテナ内でhttpdとvsftpdを稼働させ、Webブラウザで監視してみましょう。まず、httpdとvsftpdが稼働するDockerコンテナのためのDockerfileを作成します。
# mkdir /root/monit_httpd_vsftpd # cd /root/monit_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 install -y epel-release && yum clean all RUN yum install -y iproute procps-ng monit && yum clean all COPY monitrc /etc/ ←Monitの設定ファイル RUN chmod 700 /etc/monitrc ←Monitの設定ファイルへのアクセス権限の設定 RUN yum install -y httpd RUN echo "Hello Apache." > /var/www/html/test1.html COPY monit_httpd.conf /etc/monit.d/ ←httpd用の設定ファイル RUN yum install -y vsftpd RUN echo "Hello VSFTPD." > /var/ftp/pub/test2.txt COPY monit_vsftpd.conf /etc/monit.d/ ←vsftpd用の設定ファイル EXPOSE 80 2812 ENTRYPOINT ["/usr/bin/monit", "-I", "-c", "/etc/monitrc"] ←Monitの起動
Dockerfile内では、COPYによりMonitで監視するアプリケーション用の設定ファイル(monit_httpd.confとmonit_vsftpd.conf)を「/etc/monit.d」ディレクトリにコピーしています。設定ファイルは、Dockerfileの記述と矛盾がないようにホストOS上に用意します。最初にhttpd用の設定ファイルmonit_httpd.confを作成します。監視対象のアプリケーションを識別しやすい名前にするとよいでしょう。
# vi monit_httpd.conf check process httpd with pidfile "/var/run/httpd/httpd.pid" start program = "/usr/sbin/httpd -k start" stop program = "/usr/sbin/httpd -k stop"
次に、vsftpd用の設定ファイルを作成します。
# vi monit_vsftpd.conf check process vsftpd matching "vsftpd" start program = "/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf" stop program = "pkill vsftpd"
最後にMonit自体の設定を記述したmonitrcファイルを用意します。
# vi monitrc
set daemon 30 ←監視間隔(単位は秒)
set logfile syslog ←syslogによるログの取得
set httpd port 2812 and ←Web管理画面へのアクセス用のポート番号を設定
use address 0.0.0.0 ←0.0.0.0:2812でMonitの管理画面にアクセス可能
allow 172.17.0.0/16 ←アクセスを許可するネットワーク
allow admin:monit ←Monitの管理画面にログインするユーザー名とパスワード
include /etc/monit.d/* ←アプリごとの設定ファイルをロード
このmonitrcファイルでは、Webブラウザの管理画面にアクセスするためのポート番号を2812番に指定しています。また、Dockerコンテナが稼働するネットワークとして「172.17.0.0/16」のアクセスを許可する設定を記述しています。ユーザー名「admin」、パスワード「monit」で、Monitの管理画面にWebブラウザを使ってアクセスできます。
Dockerfileと全ての設定ファイルが用意できたら、Dockerイメージをビルドし、Dockerコンテナweb0004を起動します。
# pwd /root/monit_httpd_vsftpd # docker build -f ./Dockerfile -t centos:c7monit01 --no-cache=true . # docker run -itd --name web0004 centos:c7monit01
コンテナweb0004のIPアドレスを調べます。
# docker exec -it web0004 ip -4 a |grep inet
inet 127.0.0.1/8 scope host lo
inet 172.17.0.5/16 scope global eth0
今回、Dockerコンテナweb0004のIPアドレスは、「172.17.0.5/16」が割り当てられていることが分かります。ホストOS上からWebブラウザを使って、Dockerコンテナweb0004で稼働しているMonitの管理画面にアクセスしてみましょう。ユーザー名「admin」、パスワード「monit」でログインします。
httpdとvsftpdがサービスを正常に提供されているかを確認します。簡単な確認手順例を以下に示します。まず、Dockerfile内で記述したWebコンテンツtest1.htmlにアクセスできるかをホストOS上から確認します。
# curl http://172.17.0.5/test1.html Hello Apache.
次に、ホストOS上でftpクライアントのlftpコマンドを使って、Dockerコンテナweb0004が提供するtest2.txtをダウンロードできるかも確認します。ホストOS上にlftpコマンドがない場合は、yumコマンドでインストールしてください。
# yum install -y lftp
ホストOS上からlftpコマンドによって、Dockerコンテナweb0004が提供するFTPサイトにアクセスします。vsftpdが提供する公開FTPサーバには、以下のように匿名ユーザー「anonymous」、パスワード無しでアクセスできます。
# lftp -u anonymous,nopass ftp://172.17.0.5/pub cd 成功、cwd=/pub lftp anonymous@172.17.0.5:/pub>
FTPサイトにアクセスしたら、test2.txtがあるかを確認し、getコマンドでホストOS上にtest2.txtをダウンロードします。
lftp anonymous@172.17.0.5:/pub> ls -rw-r--r-- 1 0 0 V 14 Jan 25 15:20 test2.txt lftp anonymous@172.17.0.5:/pub> get test2.txt 14 bytes transferred lftp anonymous@172.17.0.5:/pub> exit
ホストOS上にダウンロードしたコンテンツtest2.txtの中身を確認します。
# cat test2.txt Hello VSFTPD. #
ここまでDockerコンテナでサービスをフォアグラウンドで直接起動する方法に加え、ラッパースクリプト、Supervisor、そして、Monitを簡単に紹介しました。これらの方法以外にも、サービスの起動、停止、監視の仕組みは幾つも存在しますが、まずは、Dockerでよく使われているこれら手法を理解しておくと、コミュニティで提供されているDockerfileやスクリプト類が理解しやすくなるかと思います。
(第17回はこちら)
日本ヒューレット・パッカード株式会社 オープンソース・Linuxテクノロジーエバンジェリスト。兵庫県伊丹市出身。1996年頃からオープンソースに携わる。2000年よりUNIXサーバーのSE及びスーパーコンピューターの並列計算プログラミング講師、SIを経験。2006年、米国HPからLinux技術の伝道師として「OpenSource and Linux Ambassador Hall of Fame」を2年連続受賞。プリセールスMVPを4度受賞。現在は日本HPにて、Linux、FreeBSD、Hadoopなどのサーバー基盤のプリセールスSE、文書執筆を担当。Red Hat Certified Virtualization Administrator, Novell Certified Linux Professional, Red Hat Certified System Administrator in Red Hat OpenStack, Cloudera Certified Administrator for Apache Hadoopなどの技術者認定資格を保有。著書に「CentOS 7実践ガイド」「Ubuntu Server実践入門」などがある。趣味はレーシングカートとビリヤード
第9回 Dockerfileで“インフラストラクチャ・アズ・コード”を体験
第14回 「延命措置」で旧システムからDocker環境に移行する方法
第13回 “根が深い”旧システムからDocker環境への移行をどうするかCopyright © ITmedia, Inc. All Rights Reserved.