Check! コンテナ管理プラットフォーム Rancher を Azure 上で動かしてみよう

こんにちは、 @dz_ こと大平かづみです。

Prologue - はじめに
====

[Rancher Meetup Tokyo #2](https://connpass.com/event/44092/ "Rancher Meetup Tokyo #2") に参加して、 [Rancher](http://rancher.com/rancher/ "Rancher Labs | Deploy and Manage Containers in Production | Rancher Labs") に惚れたのでさっそく触ってみようと思います (σ〃’ω’)σ

あれ、 Azure のアドベントカレンダーなのに何事！？

と思われたあなた、実は Rancher は Azure をホストとして利用できるのです (*ゝﾉ3･)

なので、これを目標に、今回は Rancher を Azure 上で動かすところまでに挑戦します～！

Rancher とは？
----

Rancher は、Docker をはじめとするコンテナを管理できるプラットフォームです。Kubernetes, Swarm, Mesos など主要なオーケストレーションツールに対応し、また様々なホストを利用することができます。

この管理プラットフォームとは別に、 [RancherOS](http://rancher.com/rancher-os/ "Rancher Labs | RancherOS | Rancher Labs") という、Dockerコンテナを動かすための軽量Linuxも提供されています。


Rancher と Azure で遊ぶ準備
====

まず、Rancher 自体はローカル環境でも動くのですが、外部のホストを利用するには、そのホストから Rancher にアクセスできる環境でないとなりません。

ということで、今回は Azure 上に構築します。

### Rancher の要件
- Ubuntu 16.04
    - 64-bit
    - kernel of 3.10+
- 1GB Memory
- Docker 1.10.3+

Azure 上で Rancher を動かそう
====

大まかな流れ
----
1. 仮想マシン環境 + Docker Extension を構築する
2. Rancher を起動する
3. アクセスコントロールを設定する

1. 仮想マシン環境 + Docker Extension を構築する
----

Rancher は2台のコンテナで動いているので、仮想マシン + Docker Extension で構築してみます。

- 参考: [Installation - rancher/rancher](https://github.com/rancher/rancher#installation "rancher/rancher: A Platform for Operating Docker in Production")

>  Running Rancher is as simple as launching two containers.

実は、すでにテンプレート [Simple deployment of an Ubuntu VM with Docker](https://github.com/Azure/azure-quickstart-templates/tree/master/docker-simple-on-ubuntu "azure-quickstart-templates/docker-simple-on-ubuntu at master · Azure/azure-quickstart-templates") があり、デプロイボタンでサクッと作れちゃいます。ポータルから作ろうとすると TLS の設定に惑わされるし、CLI でも作れますが、今回は楽してしまいましょう～

![20161218_rancher-azure_003.png](https://qiita-image-store.s3.amazonaws.com/0/3812/42929864-a5f4-ef4f-d845-04c0eb83c5f8.png)

ただし、このテンプレートで作成される仮想マシンは Standard_F1 で、 ¥6,905.81/月 ほどかかります。価格を抑えたい方は、適宜ご調整ください。

- 参考: [料金 - Linux Virtual Machines | Microsoft Azure](https://azure.microsoft.com/ja-jp/pricing/details/virtual-machines/linux/ "料金 - Linux Virtual Machines | Microsoft Azure")

なお、他の Azure で Docker を使う方法について後述しましたので、ご参考になれば幸いです。

2. Rancher を起動する
----
デプロイが完了したら、仮想マシンにSSHログインして、Rancher を起動しましょう。Rancher の起動は以下のコマンドを実行するだけです。

- [Installation - rancher/rancher: A Platform for Operating Docker in Production](https://github.com/rancher/rancher#installation "rancher/rancher: A Platform for Operating Docker in Production")

```bash
docker run -d --restart=unless-stopped -p 8080:8080 rancher/server
```
これだけ！かんたーん！

立ち上がるまでしばらく待ってから、ブラウザで仮想マシンの `8080` ポートを開くと、Rancher のダッシュボードにアクセスできます。（Microsoft Edge だとうまく表示されないことがあるので、 Google Chrome をお勧めします。）

- 例: `http://xxx.japaneast.cloudapp.azure.com:8080/`

![20161218_rancher-azure_007.png](https://qiita-image-store.s3.amazonaws.com/0/3812/f24b65af-2aa8-3360-bc58-873ebd74e61f.png)


3. アクセスコントロールを設定する
----
Rancher を起動した直後は、だれでも触れる状態になってますので、アクセスコントロールの設定が推奨されています。

認証方法がいくつか提供されています。簡単そうな GitHub による認証を設定してみます。

上部のメニューから、「ADMIN」 > 「Access Control」 を開きます。 `1．Setup GitHub Application` の「click here」から、GitHub の [アプリケーション登録画面](https://github.com/settings/developers "Developer applications - GitHub") を開きます。「Register a new application」をクリックし、画面の指示に従い入力し、「Register application」で登録します。

![20161218_rancher-azure_019.png](https://qiita-image-store.s3.amazonaws.com/0/3812/449b69d7-ca87-0899-b08c-14a1b0218406.png)

![20161218_rancher-azure_020.png](https://qiita-image-store.s3.amazonaws.com/0/3812/4b05084d-8d57-260c-ab1d-bed485c4fdc4.png)

生成された `Client ID` と `Client Secret` を Rancher の設定画面に入力し、保存します。「Authenticate with GitHub」をクリックし、認証を完了してください。

![20161218_rancher-azure_021.png](https://qiita-image-store.s3.amazonaws.com/0/3812/393b1530-0994-27f5-9da9-3b40c753d082.png)

![20161218_rancher-azure_022.png](https://qiita-image-store.s3.amazonaws.com/0/3812/b6ade426-ad5f-01a7-f559-42d4fb2ff58e.png)


ふぅ、これで Rancher を利用する準備ができました！！(。・ω・)ゞ


コラム: Azure で Docker 環境を作るには？
====
さて、余談ですが、 Azure で Docker 環境を作るにはいくつか方法があります。

- さくっと動かすなら [Azure App Service on Linux](https://docs.microsoft.com/ja-jp/azure/app-service-web/app-service-linux-intro "Introduction to App Service on Linux | Microsoft Docs") (Preview) が便利
    - 参考: [How to use a custom Docker image for Azure App Service on Linux | Microsoft Docs](https://docs.microsoft.com/ja-jp/azure/app-service-web/app-service-linux-using-custom-docker-image "How to use a custom Docker image for Azure App Service on Linux | Microsoft Docs")
- 1台のコンテナをさくっと動かすなら、 `docker-machine` の Azure ドライバーが便利
    - 参考: [Docker マシンを利用し、Azure で Docker ホストを作成する | Microsoft Docs](https://docs.microsoft.com/ja-jp/azure/virtual-machines/virtual-machines-linux-docker-machine?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json "Docker マシンを利用し、Azure で Docker ホストを作成する | Microsoft Docs")
- 複数のコンテナをさくっと動かすなら、仮想マシン + Docker Extension が便利
    - 参考: [Azure Docker VM 拡張機能の使用 | Microsoft Docs](https://docs.microsoft.com/ja-jp/azure/virtual-machines/virtual-machines-linux-dockerextension?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json "Azure Docker VM 拡張機能の使用 | Microsoft Docs")
- 大規模、本番向けなら、マネージドのクラスタ環境 [Azure Container Service](https://azure.microsoft.com/ja-jp/services/container-service/ "Azure Container Service | Microsoft Azure")  (ACS) が便利
    - 参考: [Azure Container Service の概要 | Microsoft Docs](https://docs.microsoft.com/ja-jp/azure/container-service/container-service-intro "Azure Container Service の概要 | Microsoft Docs")

どれも、手順に従えばとても簡単に構築できますので、用途に合わせてご検討くださいませ！

Epilogue - おわりに
====
さぁ、Rancher の環境は整いました！

次回はいよいよ Azure をホストとして登録してみますよっ！(☆´ω｀)ﾉ