Dockerの管理・監視ツール(2)
前回は、シンプルなユーザーインターフェースのDockerUIと多彩な機能を備えたShipyardを紹介しました。今回は、エンタープライズでの利用を見据え、最近の注目株である、Rancher とDockerコンテナ同士のリンクをリアルタイムで可視化するWeave Scopeというツールを紹介します。
最近注目を浴びているDocker管理ツール「Rancher」
Rancherは、エンタープライズレベルでの運用を視野に入れたDockerの管理ソフトウェアです。LDAPやGitHubによるユーザー認証、計算資源の使用状況の可視化、ログ出力、そして、クラウド環境やネットワーク上のDocker環境を跨いだ一元的な管理が可能となっており、注目が集まっています。2015年9月中旬現在、Rancherは、Amazon EC2、DigitalOcean、Rackspaceなどのパブリッククラウド上のDockerコンテナを管理対象としてサポートしています。
Rancherのインストール
Rancherも、DockerUIやShipyardと同様、Dockerコンテナが用意されていますので、簡単にインストールすることができます。事前に、RancherのDockerコンテナが稼働するホスト名とIPアドレスは、/etc/hostsまたはDNSサーバーで名前解決ができる状態にしておいてください。
# vi /etc/hosts ... 172.16.3.81 dl385pgen8b.jpn.linux.hpe.com dl385pgen8b ...
以下のコマンドを入力し、RancherのDockerイメージを入手し、Rancherのコンテナを起動します。
# docker run -d --restart=always -p 8080:8080 --name ranchersvr rancher/server
[注意]
Rancherでは、一般的に8080番を使うことが慣例となっていますが、先述のShipyardでも8080番ポートを使いますので、同一ホストOS上で、ShipyardとRancherを稼働させる場合、ShipyardまたはRancherのDockerコンテナ起動時のポート番号の指定を変更する必要があります。
RancherのDockerイメージがダウンロードされ、Dockerコンテナが起動しているかを確認します。
# docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE docker.io/rancher/server latest 0b044c7480ea 9 days ago 519.4 MB # docker ps -a CONTAINER ID IMAGE COMMAND ... PORTS NAMES b68e36b3f230 rancher/server "/usr/bin/s6-svscan ... 3306/tcp, 0.0.0.0:8080->8080/tcp ranchersvr
コンテナが起動したら、サービスが起動するまでに数分かかりますので、以下のように、docker logsに、起動したRancherのコンテナ名を指定し、起動ログを監視しておきます。
# docker logs -f ranchersvr ... 03:25:55.464 [main] INFO ConsoleStatus - [DONE ] [213640ms] Startup Succeeded, Listening on port 8081
上記のようなログが出力されたら、Rancherのコンテナが起動しているはずですので、CtrlキーとCキーを押してdocker logsから抜けてホストOSのコマンドプロンプトに戻ります。
Rancherを使ったDockerコンテナの管理
以下では、Rancherを使ったコンテナ管理を紹介します。今回は、CentOS 6.7のコンテナを起動し、コンソールから、OSのバージョンを確認するところまでの手順を示します。まず、Rancherの管理画面にアクセスします。Rancherにアクセスするには、Webブラウザで、RancherのDockerコンテナが稼働するホストOSのIPアドレスに8080番ポートを指定します。
Rancherの管理画面上部の「ADMIN」をクリックし、「HOST REGISTRATION」をクリックし、「This site's address」に、RancherのDockerコンテナが稼働するホストOSのIPアドレスとポート番号が表示されているかどうかを確認します。確認後、「Save」をクリックします。
管理対象ノードの追加
Rancherとは別の物理サーバーを管理対象ノードとします。管理対象ノードにOSとDockerをインストールしておきます。今回、管理対象ノードのホストOSは、CentOS 7.1を想定します。以下では、Rancherとは別の物理サーバーである管理対象ノードのホストOSのコマンドプロンプトを「node #」で表すとします。
node # yum install -y epel-release node # yum install -y docker
管理対象ノードがプロキシーサーバー経由でインターネットにアクセスする場合は、管理対象ノードのホストOSの/etc/sysconfig/docker-networkにプロキシーサーバーのための環境変数を設定しておきます。
node # vi /etc/sysconfig/docker-network ... http_proxy=http://プロキシーサーバーのFQDN:8080 https_proxy=http://プロキシーサーバーのFQDN:8080 node # systemctl restart docker node # systemctl enable docker
Rancherの管理画面上部の「INFRASTRUCTURE」をクリックし、その下の"Add Host" をクリックします。
管理配下の対象を選択する画面が表示されます。クラウド環境やネットワーク上のDocker環境を選択できるようになっています。今回は、ネットワーク上のDocker環境を管理対象ノードにしますので、画面の右側にあるDockerのクジラのロゴのアイコンをクリックします。
画面下部に、「sudo」から始まるコマンドが表示されますので、その文字列全てをマウス操作でコピーし、管理対象ノードのホストOSのコマンドプロンプトでペーストし、実行します。下図は、仮想端末で、管理対象ノードにSSH接続を行い、文字列をペーストした様子です。ペーストしたら、その仮想端末上でEnterキーを押します。これにより、管理対象ノードのホストOSで、Rancherの監視エージェントが稼働するDockerホストが起動します。
管理対象ノードでDockerコンテナが起動後、ノードの登録が完了するまでにしばらくかかる場合もあります。Rancherの管理画面の「HOSTS」をクリックし、管理対象ノードが登録されているかを確認します。
管理対象ノードがRancherに登録されました。これで、Rancherを使って、管理対象ノードのホストOS上のDockerコンテナを管理することがきるようになりました。
Rancherの管理画面からDockerコンテナを作成、起動してみる
管理対象ノードの「Add Container」をクリックします。すると、「Add Container」の画面が表示されますので、コンテナ名、説明、イメージ名を入力します。今回は、「NAME」に「c67test0001」、「DESCRIPTION」に「CentOS 6.7 container」、「SELECT IMAGE」に「centos:centos6.7」を入力し、最後に、画面下部の「Create」をクリックします。管理対象ノードのホストOS上に、CentOS 6.7のDockerイメージが存在しない場合は、自動的にインターネット経由でイメージファイルが入手され、Dockerコンテナが起動しますので、しばらく時間がかかります。
コンテナc67test0001が起動したら、Rancherの管理画面上部の「INFRASTRUCTURE」から、「CONTAINERS」を選択し、「State」が「RUNNING」になっているコンテナc67test0001の右端の丸いアイコンをクリックします。すると、プルダウンメニューが表示されますので、「Execute Shell」をクリックします。
コンテナc67test0001のコマンドプロンプトが表示されますので、シェル上で「cat /etc/redhat-release」を入力し、OSバージョンがCentOS 6.7かどうかを確認してください。
Weave Scopeを使ってリンクされたDockerコンテナを管理する
Webシステムでは、データベースやアプリケーションサーバーが連携して動作しますが、Dockerコンテナにおいて、これらの連携は、リンク機能を使って実現される場合が少なくありません。しかし同時に稼働するデータベースやアプリケーションの数が増えると、どのコンテナ同士がリンクされているのかを判断するのが難しくなります。そこで、Dockerコンテナ同士のリンクをリアルタイムで可視化するWeave Scopeというツールがあります。以下では、Weave Scopeのインストール手順と、Docker Composeによって、アプリケーションサーバーとデータベースサーバーが連携したシステムをWeave ScopeによってWebブラウザで管理する手順を述べます。
Weave Scopeのインストール
Weave Scopeは、インストール用のスクリプトが用意されていますので、wgetコマンドで入手し、/usr/local/bin/にscopeという名前のファイルとして保存します。プロキシーサーバーを経由して入手する場合は、環境変数http_proxyとhttps_proxyの設定を行ってください。
http_proxy=http://プロキシーサーバーのFQDN:8080 https_proxy=http://プロキシーサーバーのFQDN:8080 # wget -O /usr/local/bin/scope \ https://github.com/weaveworks/scope/releases/download/latest_release/scope # chmod +x /usr/local/bin/scope Weave ScopeのDockerイメージを入手し、Dockerコンテナとして起動します。 # which scope /usr/local/bin # scope launch
Weave ScopeのDockerイメージがダウンロードされ、Dockerコンテナweavescopeが起動しているはずです。Dockerコンテナweavescopeが稼働しているかを確認します。
# docker ps -a CONTAINER ID IMAGE COMMAND ... STATUS ... NAMES fcca3c08d159 weaveworks/scope:0.6.0 "/home/weave/entrypoi" ... Up 18 minutes ... weavescope
この状態で、Weave Scopeの管理画面にアクセスすることができます。管理画面は、Weave ScopeをインストールしたホストOSのIPアドレスに4040番ポートを付与してアクセスします。
次に、Docker Composeを入手し、/usr/local/binにdocker-composeコマンドをインストールします。
# curl -L https://github.com/docker/compose/releases/download/1.4.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose # chmod +x /usr/local/bin/docker-compose
サンプルのYMLファイルを入手します。
# mkdir /root/exmaple0001 # cd /root/example0001 # wget -O docker-compose.yml http://git.io/scope-compose
ダウンロードしたdocker-compose.ymlファイルの中身を確認します。
# cat docker-compose.yml db1: image: peterbourgon/tns-db db2: image: peterbourgon/tns-db links: - db1 db3: image: peterbourgon/tns-db links: - db1 - db2 app1: image: peterbourgon/tns-app links: - db1 - db2 - db3 app2: image: peterbourgon/tns-app links: - db1 - db2 - db3 lb1: image: peterbourgon/tns-lb links: - app1 - app2 ports: - 0.0.0.0:8001:80 lb2: image: peterbourgon/tns-lb links: - app1 - app2 ports: - 0.0.0.0:8002:80
Docker Composeを使って、上記のdocker-compose.ymlで定義されているアプリケーションサーバーのapp1、app2、データベースサーバーのdb1、db2、db3、そして、ロードバランサーのlb1、lb2のDockerコンテナを連携させます。
# docker-compose up -d
[注意]
「docker-compose up -d」で、iptablesが起因することによりDockerコンテナが起動できない旨のメッセージが出る場合は、再度「docker-compose up -d」を実行してみて下さい。
Docker Composeで連携させたコンテナが稼働しているかを確認します。
# docker-compose ps Name Command State Ports -------------------------------------------------------------------- example0001_app1_1 /app db1 db2 db3 Up 8080/tcp example0001_app2_1 /app db1 db2 db3 Up 8080/tcp example0001_db1_1 /db db1 db2 db3 Up 9000/tcp example0001_db2_1 /db db1 db2 db3 Up 9000/tcp example0001_db3_1 /db db1 db2 db3 Up 9000/tcp example0001_lb1_1 /lb app1 app2 Up 0.0.0.0:8001->80/tcp example0001_lb2_1 /lb app1 app2 Up 0.0.0.0:8002->80/tc
複雑に連携したコンテナやアプリケーションがどうなっているかをWeave Scopeで確認できます。Weave Scopeの管理画面の上部にある「CONTAINERS」をクリックします。現在稼働しているコンテナが表示されていますので、例えば、example0001_db1_1をマウスでポイントすると、連携しているコンテナのみがハイライトされて表示されます。
以上で、Dockerの管理ツールである、DockerUI、Shipyard、Rancher、そして可視化ツールのWeave Scopeを紹介しました。Dockerの管理ツールは、今回紹介した以外にも、監視した結果を履歴としてログに残すものや、閾値を設定してアラートを管理者に通知する管理ツールなども存在します。今一度、導入前に、自社に必要とされるDockerの管理・監視項目を決め、それが実現できるツールなのかどうかをチェックし、管理ツールを比較・検討してみてください。
連載バックナンバー
Think ITメルマガ会員登録受付中
全文検索エンジンによるおすすめ記事
- Dockerの管理・監視ツール(1)
- Dockerfileを使いこなす(1)
- KubernetesのDiscovery&LBリソース(その1)
- RancherのCatalog機能を詳細に見てみる
- Kubernetes環境の選択肢
- Dockerにおけるデータ専用コンテナ、KVM仮想化環境からの移行
- Oracle Cloud Hangout Cafe Season5 #3「Kubernetes のセキュリティ」(2022年3月9日開催)
- コンテナ関連技術の現状を確認しておく
- Oracle Cloud Hangout Cafe Season 4 #2「Kubernetesのネットワーク」(2021年5月12日開催)
- Rancherを構成するソフトウェア