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

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

[古賀政純(日本ヒューレット・パッカード),ITmedia]
前のページへ 1|2|3       

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

 Supervisorと並んで、複数のプロセスの起動・監視を行うソフトウェアに「Monit」があります。MonitもSupervisorと同じく、非Docker環境でも利用可能です。Webブラウザ経由でサービスの起動、停止、監視の有効化、無効化を設定することもできます。

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

 実際に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」でログインします。

図:Monitの管理画面
図: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実践入門」などがある。趣味はレーシングカートとビリヤード


前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ