Rancher でコンテナを作ってみる(Ubuntu 14.04.1 LTS 上で)

# はじめに
以前書いた記事(http://qiita.com/t-fukai/items/274246ed9a91f23ee536) ではCentOS 6 でRancher のサーバーを動かしたのですが，CentOS 6 ではコンテナの作成ができませんでした．
なので，この記事では，Ubuntu 上でRancher を動かします．
せっかくなので，前回の記事の内容とかぶりますが，Ubuntu にDocker をインストールし，Rancher の管理サーバーを起動するところから書いてみました．

# 動作環境
今回もRuncherサーバー用のVMとDockerホスト用VMを各1台づつ用意して，Rancher を動かしてみました．
2つのマシンともOS はUbuntu14.04.1 LTS, Docker のバージョンは1.4.1 です．
Rancher はDockerのバージョン**1.4 以上**を要求します．

```
# cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=14.04
DISTRIB_CODENAME=trusty
DISTRIB_DESCRIPTION="Ubuntu 14.04.1 LTS"
# docker version
Client version: 1.4.1
Client API version: 1.16
Go version (client): go1.3.3
Git commit (client): 5bc2ff8
OS/Arch (client): linux/amd64
Server version: 1.4.1
Server API version: 1.16
Go version (server): go1.3.3
Git commit (server): 5bc2ff8
```

## Ubuntu 14.04.1 LTS でDocker 1.4.1 をインストールする
Ubuntu でそのままapt-get docker をインストールすると古いバージョンのものがインストールされるので，以下のページを参考にdocker 1.4.1 をインストールします．
http://christina04.hatenablog.com/entry/2014/12/19/194022

```
# echo deb http://get.docker.com/ubuntu docker main > /etc/apt/sources.list.d/docker.list
# apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9
# apt-get update
# apt-get install lxc-docker-1.4.1
```

また，インストール後に以下のエラーに遭遇．

```
FATA[0000] Error response from daemon: Unknown filesystem type on /dev/mapper/docker-202:2-1266014-35405e6a386cda6a4c5c9b83e789c2b70e45792cc2e8c28114a769d343ac366e-init
```

↓を参考に対応．
https://github.com/docker/docker/issues/4036#issuecomment-53174208


```
# service docker stop
# apt-get remove lxc-docker
# apt-get autoremove
# rm -rf /var/lib/docker
# apt-get update
# apt-get install linux-image-extra-`uname -r`
# apt-get install lxc-docker-1.4.1
# service docker start
# docker info
Containers: 0
Images: 0
Storage Driver: aufs
 Root Dir: /var/lib/docker/aufs
 Dirs: 0
Execution Driver: native-0.2
Kernel Version: 3.13.0-45-generic
Operating System: Ubuntu 14.04.1 LTS
CPUs: 1
Total Memory: 990 MiB
Name: yarai-rancher01
ID: 24SL:ZZMM:TN63:XIXW:RPWG:KIJ2:67OT:FSDB:QAP4:6HXJ:W34C:36K7
WARNING: No swap limit support
```
# Rancher の管理サーバーを起動する & Docker ホストの追加
この手順は以前の記事(http://qiita.com/t-fukai/items/274246ed9a91f23ee536) とだいたい同じです．
Docker ホストの追加方法が以前の記事の方法と微妙に違います(詳細は後述)が，たぶんどちらの方法でも大丈夫だと思います(未確認)．

では，管理サーバーを起動します．
以下のコマンドでRancherの管理サーバーとなるコンテナを起動します．

```
# docker run -d -p 8080:8080 rancher/server
```

ここで，管理サーバーのコンテナを起動したVM の8080 ポートにブラウザでアクセスすると，以下のようなWeb UI が見れます．
![rancher-create-container001.png](https://qiita-image-store.s3.amazonaws.com/0/51342/65caaf88-3b73-7bfe-7ea6-eb59f45d26f7.png)

次に，Docker ホストを追加します．
先ほどのWeb UI で"Register a new Host" をクリックします．
![rancher-create-container0001.png](https://qiita-image-store.s3.amazonaws.com/0/51342/7d639ac8-843c-2493-caf4-bffff84e0062.png)

すると，以下のような表示が出ます．
ここで，3. に書かれている `sudo docker run ...` をコピー&ペーストして，追加したいDocker ホストのマシン上で実行します．
![rancher-create-container002.png](https://qiita-image-store.s3.amazonaws.com/0/51342/2b73c4de-6689-eb35-2757-04403e6b8691.png)

僕の環境では，このコマンドを実行した時に以下のようなエラーがでます．
しかし，気にせず待つと，ホストの追加は完了しました．
このエラーがでる原因はよくわかってません．

```
FATA[0050] Error response from daemon: Cannot destroy container 413311abca605b42e6b142c4fcee5d678e4e21dee4bd2c70964a876f9019ea8e: Driver devicemapper failed to remove root filesystem 413311abca605b42e6b142c4fcee5d678e4e21dee4bd2c70964a876f9019ea8e: Device is Busy
```


### 補足
前回の記事(http://qiita.com/t-fukai/items/274246ed9a91f23ee536) では，Docker ホストの追加の方法を以下のように書いてました．

>追加したいホストマシンで以下のコマンドを実行すると追加できます．

>```
# docker run --rm -it --privileged -v /var/run/docker.sock:/var/run/docker.sock rancher/agent http://<管理サーバのIP>:8080
```

これでもDocker ホストを追加できると思うのですが，今回記事では，先に書いたWeb UI からコマンドをコピー&ペーストする方法でやったので，一応そちらを書きました．

# コンテナの作成
nginx のコンテナを作ってみます．

Docker ホストを1つだけ追加した直後のWeb UI は以下のようになっています．
![rancher-create-container00.png](https://qiita-image-store.s3.amazonaws.com/0/51342/536e824e-642a-10e5-59ca-80e12ae8f804.png)

ここで，ホスト(画像ではyarai-rancher02)の下にある"+ Add Container" をクリックします．
![rancher-create-container01.png](https://qiita-image-store.s3.amazonaws.com/0/51342/7fb8e8e7-79e7-3f2e-82f2-13b097404237.png)

コンテナ作成のための画面が出てきました．
色々設定項目がありますが，今回はコンテナの名前と元となるイメージだけを設定します．
![rancher-create-container02.png](https://qiita-image-store.s3.amazonaws.com/0/51342/f933dd97-79a2-9020-04c5-92d8771c7c3e.png)

"Name" にコンテナの名前，"Source Image" に元となるイメージを入力します．
ここでは，両方共"nginx" と入力しました．
入力したら下部にある緑色の"Create" というボタンをクリックします．
![rancher-create-container03.png](https://qiita-image-store.s3.amazonaws.com/0/51342/c4f30963-ff8a-ea6b-20cc-e6c208091e70.png)

元のHosts の画面に戻ります．
先ほどコンテナの作成を指示したコンテナには，コンテナ作成の進捗が表示されます．
nginx 以外にも，"Network Agent" というコンテナも同時に作成されます．
このコンテナは，Rancher が提供するオーバレイネットワークのエージェントのようで，Docker ホストに初めてコンテナを作成した時に同時に作成されます．
今回，これらのコンテナの作成には1分30秒程かかりました．
![rancher-create-container04.png](https://qiita-image-store.s3.amazonaws.com/0/51342/c6c7ec0e-592f-ea33-0b12-044c8e3af606.png)

2つのコンテナの作成が完了したら，以下のような画面になります．
本来は，ホストの真ん中あたりにある，鎖のようなアイコンの横にホストのIPアドレスが出るはずなのですが，最初はなぜか出ません．
ページをリロードすると出てくるので，ブラウザでページをリロードします．
![rancher-create-container05.png](https://qiita-image-store.s3.amazonaws.com/0/51342/b41e8c83-1564-6066-d27d-4cf8602143e3.png)

リロードすると，ホストのIP アドレスが出てきました(画像ではモザイクを掛けてます)．
![rancher-create-container06.png](https://qiita-image-store.s3.amazonaws.com/0/51342/c7c5febf-d1aa-20dd-1fb9-f10b77db73da.png)

次に，ブラウザからnginx のページが見れるようにポートバインディングの設定をします．
nginx コンテナの横にある`∨` をクリックします．
出てきたプルダウンメニューから，"Edit" をクリックします．
![rancher-create-container07.png](https://qiita-image-store.s3.amazonaws.com/0/51342/061804a4-ae9f-756a-3812-79483cb63b44.png)

コンテナの設定画面が出てきました．
今回は，Port Buinding の部分を入力します．
![rancher-create-container08.png](https://qiita-image-store.s3.amazonaws.com/0/51342/47a8f45b-3324-b5fc-f231-0070f83b7918.png)

"→ 80" の左にあるテキストボックスにコンテナの80 番ポートにバインドするホストのポートを入力します．
今回は8888 ポートを指定しました．
入力したら，下部にある緑色の"Save" ボタンをクリックします．
![rancher-create-container09.png](https://qiita-image-store.s3.amazonaws.com/0/51342/ecbf55fe-d669-53ca-95db-899dc1d64be7.png)

ブラウザで `http://<Docker ホストのIP>:8888` にアクセスしてみます．
nginx のページが見れたら，コンテナがうまく作成され動作しています．

![rancher-create-container10.png](https://qiita-image-store.s3.amazonaws.com/0/51342/5366fe25-1aef-4110-a017-30352a776ef9.png)

# おわりに
今回はUbuntu 14.04.1 LTS 上でRancher を動かして，コンテナを作る手順を書きました．
次は，コンテナ同士を連携させたりしたいです．