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実践入門」などがある。趣味はレーシングカートとビリヤード
Copyright © ITmedia, Inc. All Rights Reserved.