Monitとは、プロセス監視ツールです。
なぜ、このMonitを利用するかというと、、、Dockerは起動時に1つしかプロセスを起動するコマンドが使えないためです。
このMonitを利用すると、プロセスが立ち上がっていない場合Monitがかわりに起動してくれる様な設定が可能です。
なので、Dockerの起動時に立ち上げるプロセスをMonitにしておけば、Monitに監視させている他のプロセス(ApacheやSSHなど)をMonitが立ち上げてくれるんです!
それではインストールの仕方と設定方法を書いていきます。
・用意するもの
Dockerがインストールされた環境のみ。
もし、DockerがインストールされていなければMacでDockerを動かすでインストールしてみてください。
・まずはDockerを使ってcentosを起動
$ docker run -i -t centos /bin/bash
・続いて、とりあえずサーバを最新化します
$ yum update
・Monitのインストール
$ rpm --import http://apt.sw.be/RPM-GPG-KEY.dag.txt $ rpm -ivh http://apt.sw.be/redhat/el5/en/i386/rpmforge/RPMS/rpmforge-release-0.5.1-1.el5.rf.i386.rpm $ yum install --enablerepo=rpmforge monit
・Apacheのインストール
$ yum install httpd
・index.html作成 $ echo test > /var/www/html/index.html
・一旦、centosをコミットしておく(ここは飛ばしてもOK)
$ exit 上記で、Dockerから抜ける。 $ docker ps -l CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 20cafcb9639e centos:6.4 /bin/bash 3 days ago Exit 0 grave_shockley $ docker commit 20c ak220/centos・コミット確認
$ docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE ak220/centos latest d83459021df6 3 days ago 668 MBcommitしたimageが存在することを確認。
・commitした状態の続きを操作するの
$ docker run -i -t ak220/centos /bin/bash
・Monitの設定
$ vi /etc/monit.conf変更項目は下記
変更前 set httpd port 2812 and use address localhost allow localhost allow admin:monit allow @monit allow @users readonly 変更後 set httpd port 2812 and use address 0.0.0.0 allow admin:monit続いて、MonitにApacheを監視させる。
$ vi /etc/monit.d/httpd.conf check process httpd with pidfile /var/run/httpd.pid start program = "/etc/init.d/httpd start" with timeout 60 seconds stop program = "/etc/init.d/httpd stop" if failed port 80 protocol http then restart group apache
・Monitの設定ファイルが正しいかを確認
$ monit -t
Control file syntax OK #と表示されればOK
Control file syntax OK #と表示されればOK
・Monit起動
$ service monit start Starting monit: Starting monit daemon with http interface at [0.0.0.0:2812] [ OK ]もし「/etc/init.d/monit: line 18: /etc/sysconfig/network: No such file or directory」というエラーがでたら、下記のコマンドを実行して下さい。
$ touch /etc/sysconfig/network
Apacheが起動していることを確認する。ApacheのプロセスがあればOK。 $ ps -ef | grep httpd root 53 1 0 14:10 ? 00:00:00 /usr/sbin/httpd apache 55 53 0 14:10 ? 00:00:00 /usr/sbin/httpd apache 56 53 0 14:10 ? 00:00:00 /usr/sbin/httpd apache 57 53 0 14:10 ? 00:00:00 /usr/sbin/httpdここまでできたら、Dockerから抜けます。
$ exit
・構築したコンテナをコミットして、Monitを起動
$ docker ps -l CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d99e2f8dc5bc ak220/centos:latest /bin/bash 3 days ago Exit 0 hungry_engelbart $ docker commit d99e2f ak220/centosDockerで構築したimageをコミットしたので、このイメージをRunさせるときにMonitのプロセスを実行します。
ついでに、localhost:10080をDockerのCentOSで稼働しているApacheの80番ポートに紐付けます。
$ docker run -d -t -p 10080:80 -p 12812:2812 ak220/centos /usr/bin/monit -I
で、http://localhost:10080にアクセスすると、、、ん、見れない。EC2上ではうまく行ったのに・・・。
だいぶ困った。同じ設定なのに。
EC2上とMac上でのDockerの起動の違いはMacではboot2docker上でDockerが起動していること。VirtualBoxのポートフォワードが犯人でした。
ということで、boot2dockerの設定をします。
$ ./boot2docker stop $ for i in {49000..49900}; do VBoxManage modifyvm "boot2docker-vm" --natpf1 "tcp-port$i,tcp,,$i,,$i"; VBoxManage modifyvm "boot2docker-vm" --natpf1 "udp-port$i,udp,,$i,,$i"; done $ ./boot2docker start $ docker run -d -t -p 49080:80 -p 49812:2812 ak220/centos /usr/bin/monit -Ihttp://localhost:49080/
で「test」っていう文字がブラウザに表示されたらOK。(このtestはecho text > /var/www/html/index.htmlで書き込んだやつ)
・Monitの管理画面
http://localhost:49812/
これでMonitの管理画面が見れます。プロセスの停止、起動が出来たりします。
VirtualBoxのポートフォワードにははめられました。みなさん気をつけて下さい。
0 件のコメント:
コメントを投稿