Rancher.ioでDockerコンテナを管理する - Part3: Rancher.ioをインストールする

IDCFクラウド上に構築した[Salt+Docker](http://qiita.com/masato/items/c27c621ecb75cd205d30)環境に[Rancher.io](https://github.com/rancherio/rancher)をデプロイします。Rancher.ioは管理サービスもDockerコンテナとしてデプロイするので、インストールがとても簡単です。salt-masterにManagement Serverを、salt-minionにDocker Nodesをデプロイします。


## Saltクラスタの確認

minionの仮想マシンは以下の2台です。salt.cs3d0idcfcloud.internalの仮想マシンはsalt-masterとsalt-minionを兼用しています。

``` bash
$ salt-key
Accepted Keys:
minion1.cs3d0idcfcloud.internal
salt.cs3d0idcfcloud.internal
Unaccepted Keys:
Rejected Keys:
root@salt:/srv/salt/config/salt#
```

## Management Serverのインストール

salt-masterの仮想マシン(salt.cs3d0idcfcloud.internal)にログインします。Dockerイメージをpullして起動するだけです。

``` bash
$ sudo docker pull rancher/server
$ sudo docker run -d -p 8080:8080 rancher/server
```

## Docker Nodesのインストール

salt-minionの仮想マシン(minion1.cs3d0idcfcloud.internal)にログインします。こちらもDockerイメージをpullして起動するだけですが、いくつか引数を渡します。

``` bash
$ sudo docker pull rancher/agent
$ sudo docker run  -it \
  -e CATTLE_AGENT_IP="210.140.173.117" \
  -v /var/run/docker.sock:/var/run/docker.sock rancher/agent \
  http://10.3.0.165:8080
```

## CATTLE_AGENT_IP

まず、環境変数の`CATTLE_AGENT_IP`は`Docker Nodes`の仮想マシンにスタティックNATしたパブリックIPアドレスを指定します。IDCFクラウドの場合アカウントのVLANとインターネットの間にVirtual Routerがあります。仮想マシンのプライベートIPアドレスは直接インターネットの外部から接続できません。あらかじめポータル画面からパブリックIPアドレスの1つをminion1の仮想マシンに対してスタティックNATしておく必要があります。`CATTLE_AGENT_IP`にはこのスタティックNATを指定して、外部から接続できるIPアドレスを割り当てます。このIPアドレスはRancher.ioのUI(管理画面)に`Host`のIPアドレスに表示されます。ブラウザからWebSocketを使ったコンソール接続や、cAdvisorを使ったメトリクスの収集に直接使用されます。

## Management ServerのIPアドレス

上記では`http://10.3.0.165:8080`が`Management Server`のIPアドレスになります。`Docker Nodes`からの接続になるためアカウントVLAN内のプライベートIPアドレスで指定します。

## UI (Rancher.ioの管理画面)

`Docker Nodes`のコンテナをsalt-minionで起動してしばらくするとUIにHostとして表示されます。

![rancher-ui-hosts-top.png](https://qiita-image-store.s3.amazonaws.com/0/43745/8959dcf5-2255-9bc2-ec34-edbe001ef380.png)


## Ghostイメージのデプロイ

サンプルとして[dockerfile/ghost/](https://registry.hub.docker.com/u/dockerfile/ghost/)を使います。通常の`docker run`コマンドの場合は以下に相当します。

``` bash
$ docker run -d -p 80:2368 dockerfile/ghost
```

## Create Containerダイアログ

Hostの`No container yet.`の下のプラスボタンを押して`Create Container`ダイアログを表示します。

The BasicタブにDocker Hub Registryから取得するイメージ情報など基本情報を入力します。

![rancher-container-basic.png](https://qiita-image-store.s3.amazonaws.com/0/43745/a7927068-a518-0513-0fca-62e3fa07000f.png)


Portタブに、Dockerホストにマップするポートを入力します。

![rancher-container-port.png](https://qiita-image-store.s3.amazonaws.com/0/43745/00265105-af2d-588f-5910-42c15e74191a.png)


Commandタブの`As User`は必須項目になっています。ブランクだとコンテナが作成できないため参考値の`root`を指定します。

![rancher-container-command.png](https://qiita-image-store.s3.amazonaws.com/0/43745/86eb37d3-e326-fad4-babc-23456ac4cf13.png)

### cAdvisorのリアルタイムグラフ

cAdvisorのメトリクスをブラウザからWebSocketでCattle Agent経由で取得します。`Docker Nodes`のホストと、コンテナのメトリクスがそれぞれリアルタイムで表示されます。

Hostのグラフです。

![rancher-ui-hosts.png](https://qiita-image-store.s3.amazonaws.com/0/43745/250d3a83-6171-300e-d161-55fdaf27dfd1.png)

コンテナのグラフです。

![rancher-container-ghost.png](https://qiita-image-store.s3.amazonaws.com/0/43745/073e9eae-5b01-8b25-9eb1-570e862d90d7.png)


## コンテナのシェル操作

各Containerページの右上、`Execute Shell`アイコンをクリックするとWebSocket経由でコンテナのシェルを実行することができます。

![rancher-container-execute-shell.png](https://qiita-image-store.s3.amazonaws.com/0/43745/a00ae285-32a5-cb02-0bec-fecc545eb713.png)


コンテナのコンソールはlibvirtのVNC WebSocketサポートを使っているようです。

![rancher-container-shell.png](https://qiita-image-store.s3.amazonaws.com/0/43745/eb32d457-0844-969c-acdf-ac5f43e3d008.png)