CTOからの年末年始の宿題:Rancherでdocker管理体験

# CTOからの年末年始の宿題Rancherでdocker管理体験(30分)
前回の記事でrancherのvagrantのboxをダウンロードしてrancherを簡単に動かしてみるというとこはやりましたが、本格的にrancherを使ってみるために、vagrantにubuntu14.04からVMを作り、rancherを動かしてみましょうというネタを共有したいと思います。

![docker_rancher.png](https://qiita-image-store.s3.amazonaws.com/0/74153/d819d9ed-863d-d1e6-6bf1-2268fa26ce55.png)

自分の手元の開発環境ではこのようにvagrantとdockerを上手く使い分けをしています。
時間もそれほどかからないので、年末年始の宿題にはもってこい。

アプリばっか書いてて、インフラ少し弱いわって人、dockerを触るチャンスですよ〜

※図では1コンテナに複数サービス書いちゃってますが、1コンテナ1サービスが鉄板構成です。ここについてはまたどっかで記事にあげようと思います。

## vagrantに元になるubuntuを構築する
docker管理の基盤にはubuntuをベースに構築していきます。

### vagrantでdocker入りのubuntuのboxをダウンロードする
ubuntuにdockerを自分で入れるのもいいのですが、簡略化のためにdocker入りを使用することにします。以下のコマンドでboxを追加しましょう。

#### box追加
```
$ vagrant box add ubuntu14_04_docker https://github.com/jose-lpa/packer-ubuntu_14.04/releases/download/v2.0/ubuntu-14.04.box
```


#### box確認
```
$ vagrant box list
ubuntu14_04_docker  (virtualbox, 0)
```

### vagrantでVMホストを構築
今回は「Vagrantfile」でマルチホスト構成としてみたいと思います。Vagrantfileのあるフォルダを都度移動する手間も省けるので自分はいつもプロジェクトごとにVafrantfileのマルチホスト構成を作るようにしています。

#### Vagrantfile作成
vagrantのVM同士で通信可能という形で構築します。
メモリは1024MBでIPは以下の通りを想定してVagrantfileを作っています。

- docker-rancher
 - IP:192.168.50.201
- docker-host1
 - IP:192.168.50.202

※必要に応じ変更するようにしてください。

```
$ mkdir docker_dev
$ cd docker_dev
$ vi Vagrantfile
```

```lang:Vagrantfile
# -*- mode: ruby -*-
# vi: set ft=ruby :

# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|

  config.vm.define "docker_rancher" do |v|
    v.vm.box = "ubuntu14_04_docker"
    v.vm.network :forwarded_port, host: 9201, guest: 80
    v.vm.network "private_network", ip: "192.168.50.201",virtualbox_inet:"test_local"

    if Vagrant.has_plugin?("vagrant-cachier")
       config.cache.scope = :box
    end
  end

  config.vm.define "docker_host1" do |v|
    v.vm.box = "ubuntu14_04_docker"
    v.vm.network :forwarded_port, host: 9202, guest: 80
    v.vm.network "private_network", ip: "192.168.50.202",virtualbox_inet:"test_local"

    if Vagrant.has_plugin?("vagrant-cachier")
       config.cache.scope = :box
    end
  end

  config.vm.provider :virtualbox do |vb|
    vb.customize ["modifyvm", :id, "--memory", "1024", "--cpus", "2", "--ioapic", "on"]
    vb.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
    vb.customize ["modifyvm", :id, "--natdnsproxy1", "on"]
  end
end
```

#### vagrant VM起動
「vagrant up マシン名」で起動させましょう。

※Vagrantfileをマルチ構成で設定している場合には「vagrant up」を実行すると、マルチホスト構成の記載のマシンを一気に起動できます。

```
$ vagrant up docker_rancher
$ vagrant up docker_host1
```

![image](https://qiita-image-store.s3.amazonaws.com/0/74153/ac81d161-6189-dc84-376f-1e9578e1b11a.png)

#### ubuntu最新化(docker-host1とdocker-rancherで作業)
docker-host1とdocker-rancherの2台のVMで作業が必要です。

```
$ sudo apt-get update
$ sudo apt-get install wget

```

#### dockerの最新化(docker-host1とdocker-rancherで作業)
dockerも最新としておきましょう。

```
$ wget -qO- https://get.docker.com/ | sh
```

## rancher設定(docker-rancherのみ作業)
dockerを管理するオープンソースのrancherをdocker-rancher側のみ構築します。

![docker_rancher1.png](https://qiita-image-store.s3.amazonaws.com/0/74153/f069f1ff-57e2-f9d6-611b-bdcdd7d3c8cf.png)

#### docker-rancherにSSHログイン

```
$ vagrant ssh docker_rancher
```


#### rancherインストール
dockerコンテナを走らせるだけですが。以下のコマンドを実行するとpullされます。

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

![docker_rancher_install.gif](https://qiita-image-store.s3.amazonaws.com/0/74153/b99e6379-c35a-e1e5-7470-f12ffe46a0b1.gif)


#### rancherブラウザアクセス
この手順通りだと
「[http://192.168.50.201:8080/](http://192.168.50.201:8080/)」にアクセスすると管理画面にアクセス出来ます。

#### rancherアクセス権限設定
管理画面にアクセスすると画面上部に赤い帯の「Access Control」というリンクをクリックしましょう。取り急ぎGitHub連携しておけば問題ないと思います。Githubを選択している状態で「click here」をクリックしましょう。Githubにログイン済みであればApplicationを登録する画面が表示されていると思うのでRancherに記載されているものをコピペしていきましょう。

![rancher-compressor.gif](https://qiita-image-store.s3.amazonaws.com/0/74153/1e22c6f7-b79c-4c23-c827-d3a8d9338b4d.gif)

## docker hostの追加
#### Rancher管理画面からAdd Hosts

1. 上部のInfrastructureからHostsに入る
2. Add Hostsを押下
3. Customを選択
4. エージェントインストールのコマンドをコピペ

#### rancher-agentインストール
次にdocker-host1側にrancher-agentをインストールしましょう。

![docker_host1.png](https://qiita-image-store.s3.amazonaws.com/0/74153/37788ff5-f196-93ee-6a7f-5847b23f7205.png)

```
$ vagrant ssh docker_host1
```

コピペしたコマンドを実行しましょう。

![rancher_add_host_new-compressor.gif](https://qiita-image-store.s3.amazonaws.com/0/74153/c5e45212-ee82-eb77-f53e-d8ed6a83c14f.gif)

#### 追加したホストの確認
docker_host1側でエージェントのインストールが終わった後に、管理画面上からHOSTSにアクセスすると追加したDocker ホストが追加されていることが確認出来ます。

![rancher_add_host_check-compressor.gif](https://qiita-image-store.s3.amazonaws.com/0/74153/a14e924a-338c-6e74-3c95-7520ecf4384a.gif)

## Dockerコンテナの追加
Rancher管理画面からdockerホストが追加されたことが確認出来たので管理画面からコンテナを追加してみましょう。

<img width="559" alt="Rancher_add.png" src="https://qiita-image-store.s3.amazonaws.com/0/74153/8bf01960-3880-db1f-d916-aa9bf48e0e24.png">

docker_host1でしばらくするとdockerコンテナが追加されます。

![container_check-compressor.gif](https://qiita-image-store.s3.amazonaws.com/0/74153/e7df4fa4-63d7-1411-3e5c-91450f59a1d3.gif)

## まとめ
独自のDocker基盤をIaasとして持つなんてことが簡単に出来るようになりました。RancherはAPIもあるので、自社インフラに組み込んで運用することも出来たりするのでおすすめです。年末年始のおもちゃにどうぞ！

## おまけ
Dockerホストを登録した後であれば、APPLICATIONSのCATALOGというメニューからポチっとおせば、予め用意されているテンプレートからすぐに環境をデプロイ出来たりします。jenkins-ciやkibana、Elasticsearchなどもあったりするので暇があればポチってみてください。数分ですぐに環境が出来上がっちゃいます。

![jenkins-compressor.gif](https://qiita-image-store.s3.amazonaws.com/0/74153/c0d36050-2889-5d97-afea-714071b9ec98.gif)

Launchってポチるだけで数分後にはdockerホストにStack(コンテナのセット）が以下のように作られます。

![image](https://qiita-image-store.s3.amazonaws.com/0/74153/12eed48a-840a-828f-2306-a6700a5a6a6b.png)

手順通り進んだ場合は「[http://192.168.50.202:8080/](http://192.168.50.202:8080/)」にアクセスするとjenkinsおじさんとご対面です。

![image](https://qiita-image-store.s3.amazonaws.com/0/74153/d68c0a0c-c372-2e10-1eda-a2ced374d98c.png)