Docker実践ガイド 12

Dockerの管理・監視ツール(2)

前回は、シンプルなユーザーインターフェースのDockerUIと多彩な機能を備えたShipyardを紹介しました。今回は、エンタープライズでの利用を見据え、最近の注目株である、Rancher とDockerコンテナ同士のリンクをリアルタイムで可視化するWeave Scopeというツールを紹介します。最

古賀 政純

2015年10月27日 17:00

前回は、シンプルなユーザーインターフェースの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の管理・監視項目を決め、それが実現できるツールなのかどうかをチェックし、管理ツールを比較・検討してみてください。

この記事のキーワード

この記事をシェアしてください

人気記事トップ10

人気記事ランキングをもっと見る