サーバの上で、どんなコンテナが動いているかを把握するのは大変ではないでしょうか。自分だけの環境ならまだしも、複数台のサーバ環境を見なくてはいけない場合は面倒。特に複雑にリンクしている場合や、グループやチーム内で共有している環境では、誰が何を立ちあげているのか確認するだけでも一苦労。
その問題を解決するのが、Weave Scope というツール。最近使う機会がありましたので、内容を軽く共有します。
■ Weave ?
Weave(http://weave.works/)という、Weaveworks 社が公開しているオープンソースのプロジェクトがあります。先月 Weave 1.0 としてリリースされました。これは Docker コンテナのネットワークを拡張するプラグイン機能であり、全体として3つのモジュールで構成されています(正確には、それぞれがコマンドラインのツールですが、一体的に運用しても構いませんし、1つ1つ使っても構いません)。
Weave Net(http://weave.works/net/)… コンテナ間のネットワークを自動的に構成するコマンドラインのツール。Docker だけでなく、CoreOS や Kubernetes とも連携できるため、ネットワークとある種のクラスタ管理ツールとも言えそうです。
Weave Scope(http://weave.works/scope/)… Docker やアプリケーションの構成を自動的に視覚化するコマンドラインのツール。
Weave Run(http://weave.works/run/) … コンテナのロードバランシングや、ルーティング、
サービス・ディスカバリ、IP アドレスの管理を行います。
今回は、この中でも操作が簡単で役立ちそうな Weave Scope を紹介します。
■ Weave Scope とは?
Weave Scope はブラウザを通して、ホスト上でどのようなコンテナやアプリケーション(プロセス)が稼働しているかどうか見ることができ、その関連性をリアルタイムでマッピング(地図化)するためのものです。
セットアップは非常に簡単で、コマンドライン上のバイナリをダウンロードして実行するだけです。あとはポート 4040 でブラウザにアクセスすると、様々なコンテナの状態が表示されます。画面には3つのモードがあります。
「APPLICATIONは」のメニューをクリックすると、コンテナ上で動くアプリケーション(デーモン)の関連性を表示します。このとき、左右にドラッグで表示画面を移動し、Windows であればホイールの上下で拡大縮小を行います。
クリックすると、次のように、プロセスの詳細情報や、稼働しているホストの情報などが表示されます。ちなみにこの環境は、Rancher を動かしているものです。
「BY NAME」をクリックすると、名前だけで論理的にソートされた構成を表示することもできます。
「CONTAINERS」を押すと、稼働しているコンテナの情報が表示されます。
最後に「HOSTS」を押すと、サーバの IP アドレスとネットワークに関する情報が表示されます。この環境は DigitalOcean 上で、4台のサーバを使い Rancher 環境を作りました。それぞれ次の図のように、Rancher を通して繋がっていることが分かります。
■ Weave Scope のセットアップ
セットアップは非常に簡単です。バイナリが配布されていますので、curl でダウンロードしてパーミッションを設定するだけです。
$ wget -O scope git.io/scope $ chmod +x ./scope $ sudo sp ./scope /usr/local/bin/scope
ブラウザで UI を表示するには、単純に scope を実行するだけで確認できます。
$ scope launch
あとは http://<IPアドレス>:4040/ に接続することで、情報をブラウザから確認できます。
■ Weave Scope のチュートリアルを試すには
複数台の環境がなくても、簡単に複数のコンテナ環境を作って動作確認するチュートリアルが公開されています。チュートリアルを進めるためには、Docker そのものと、複数のコンテナ構成をコードで記述する Docker Compose のセットアップが必要です。
$ wget -qO- https://get.docker.com/ | sh $ sudo curl -L https://github.com/docker/compose/releases/download/1.3.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose $ sudo chmod +x /usr/local/bin/docker-compose
そのあと、Docker Compose を使い環境を準備します。
$ wget -O docker-compose.yml http://git.io/scope-compose $ docker-compose up -d
正常に動作しているかどうかは、「docker-compose ps」コマンドを実行します。
# docker-compose ps Name Command State Ports ------------------------------------------------------------- root_app1_1 /app db1 db2 db3 Up 8080/tcp root_app2_1 /app db1 db2 db3 Up 8080/tcp root_db1_1 /db db1 db2 db3 Up 9000/tcp root_db2_1 /db db1 db2 db3 Up 9000/tcp root_db3_1 /db db1 db2 db3 Up 9000/tcp root_lb1_1 /lb app1 app2 Up 0.0.0.0:8001->80/tcp root_lb2_1 /lb app1 app2 Up 0.0.0.0:8002->80/tcp
あるいは、「docker ps」コマンドでも、複数のコンテナが起動していることが分かります。
# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4e4646bad5e1 peterbourgon/tns-lb:latest "/lb app1 app2" 18 hours ago Up 18 hours 0.0.0.0:8001->80/tcp root_lb1_1 6572819808c6 peterbourgon/tns-lb:latest "/lb app1 app2" 18 hours ago Up 18 hours 0.0.0.0:8002->80/tcp root_lb2_1 24d3268d8bcb peterbourgon/tns-app:latest "/app db1 db2 db3" 18 hours ago Up 18 hours 8080/tcp root_app1_1 da2bdfc8461f peterbourgon/tns-app:latest "/app db1 db2 db3" 18 hours ago Up 18 hours 8080/tcp root_app2_1 83b8aa62ae99 peterbourgon/tns-db:latest "/db db1 db2 db3" 18 hours ago Up 18 hours 9000/tcp root_db3_1 cdcc82cc7ed4 peterbourgon/tns-db:latest "/db db1 db2 db3" 18 hours ago Up 18 hours 9000/tcp root_db2_1 8d52027e32c7 peterbourgon/tns-db:latest "/db db1 db2 db3" 18 hours ago Up 18 hours 9000/tcp root_db1_1
あとは、この環境に Weave Scope をセットアップして起動するだけです。
ブラウザで http://<IPアドレス>:4040/ にアクセスします。「APPLICATION」をクリックすると、次のように、コンテナ間が複雑につながっているのが見えます。
「APPLICATION BY NAME」の「BY NAME」をクリックすると、個々のコンテナの情報ではなく、論理的な構成が表示されます。こうやって見ると、次の図の様に、構成そのものはシンプルだというのが分かると思います。
この環境を停止するには「docker-compose stop」を実行します。
# docker-compose stop Stopping root_lb1_1... Stopping root_lb2_1... Stopping root_app1_1... Stopping root_app2_1... Stopping root_db3_1... Stopping root_db2_1... Stopping root_db1_1...
停止した後は、次のようになにも表示されません。
以上でチュートリアルは完了です。あとはコンテナを立ちあげてみたり、コンテナ間をリンクさせてみたりして、どのように画面上に反映するのか確認してみると面白いと思います。おそらく直近で活躍しそうなのは、Docker Compose の設定が正しいかどうかの確認や、うまくいかない時のデバッグに使えそうに思っています。
■ 参考情報
Weave Scope
http://weave.works/scope/
How To Detect, Map and Monitor Docker Containers with Weave Scope from Weaveworks – The New Stack
http://thenewstack.io/how-to-detect-map-and-monitor-docker-containers-with-weave-scope-from-weaveworks/