WindowsのDocker ToolboxのRancherOSでRancherとConcourseを動かす

職場がJenkinsすぎるんですが、JenkinsのUIがどうしても好きになれないのでConcourseを試そうと思いまして。
かといって、いきなり稼働中のサーバーにぶち込むのもアレなので、いったん練習のためにWindowsのDocker環境を構築し、試すことにしました。
ニッチすぎていいねが0かもしれないけど、そんなことは気にしない。
いいねなんて飾りです。偉い人にはそれがわからんのです。

# はじめに
今回、Docker ToolboxをWindows上にインストールし、RancherOSを突っ込んでやります。
で、RancherOS上でRancherを稼働させ、ConcourseのPrivate Catalogを作成した後、Concourseを立ち上げます。

- [Docker Toolbox](https://docs.docker.com/toolbox/overview/) -> VirtualBoxを使って楽にDocker環境動かせるやつ。legacyとか言われてるけどこっちは貧乏なので仕方ない。
- [RancherOS](https://rancher.com/rancher-os/) -> Docker用のとても小さいOS。cloud-config使える。
- [Rancher](https://rancher.com/what-is-rancher/overview/) -> コンテナを管理しやすくするやつ。でも2.0からはkubeだって...ピエェ！
- [Concourse](https://concourse-ci.org) -> Jenkins駆逐艦隊。見た目がナウい。CIツールは見た目が9割。

何故Docker for Windowsを使わないかって？
ボーイ、My Windows(ここ)はHome Editionだぜ...。[^1]

# Docker Toolbox入れる
[インストールページ](https://docs.docker.com/toolbox/toolbox_install_windows/)に行ってexeおとして実行しましょう。

情報送信のチェックボックスはオフる。気にならないなら良いですが。
<img width="250" alt="2018-04-28_12h27_07.png" src="https://qiita-image-store.s3.amazonaws.com/0/161568/e9fc85f9-f2ee-8764-714a-9bb5a7843e6a.png">

インストールパスはお好みで。
<img width="250" alt="2018-04-28_12h31_35.png" src="https://qiita-image-store.s3.amazonaws.com/0/161568/a5cf9f02-ea2b-fd42-b609-c4e7bf43df49.png">

全部チェック。
<img width="374" alt="2018-04-28_12h32_07.png" src="https://qiita-image-store.s3.amazonaws.com/0/161568/f6fec3b2-cfb7-0834-5479-35f14143b9ed.png">

一番下にチェックを入れた方がよろしい模様。理由はググってください。
<img width="374" alt="2018-04-28_12h44_04.png" src="https://qiita-image-store.s3.amazonaws.com/0/161568/399edce6-a256-da77-4e64-1d1ee99ae6e7.png">

あとはよしなに。

# Dockerホスト作成
インストールが完了したら、DockerQuickstartTerminalを起動。
<img width="145" alt="2018-04-28_15h26_28.png" src="https://qiita-image-store.s3.amazonaws.com/0/161568/5b583228-801d-3bf2-7b78-ea1b203e6fc0.png">

DOS窓が開いてごちゃごちゃ出力されたのち、くじらが表示されればOK。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/161568/f498f464-cc9c-b6bc-bc2f-a48dd7a7452b.png)

以降のオペはここで実行。

#### Dockerホストの確認と停止
まず、現状のDockerホストを確認します。

```
$ docker-machine ls
NAME      ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER        ERRORS
default   *        virtualbox   Running   tcp://192.168.99.100:2376           v18.03.1-ce
```

デフォルトがいますが、今回はRancherOSにしたいので、取りあえず止めます。

```
$ docker-machine stop default
Stopping "default"...
Machine "default" was stopped.
```

#### RancherOSホストの作成
次に、以下のコマンドでRancherOSをホストに追加します。

```
$ docker-machine create -d virtualbox \
--virtualbox-boot2docker-url https://releases.rancher.com/os/latest/rancheros.iso \
--virtualbox-memory 4096 \
--engine-opt mtu=1402 \
ranchang
```
- -d -> driver。virtualbox使うので。
- --virtualbox-boot2docker-url -> boot2docker(Docker用の軽量Linuxディストリ)のイメージを指定。ここにRancherOSを指定してやる。
- --virtualbox-memory -> ホストに割り当てるメモリ。デフォルトの1024だとRancherが動かないので、取りあえず4096に増やしてやる。
- --engine-opt mtu=1402 -> mtuを指定してやります。これをやらなかったら、mtuの設定がホストとコンテナでずれて通信が死んだ...ような。

最後の`ranchang`はホスト名なのでなんでもいいです。

では入ってみましょう。
ログインできればOKです。

```
$ docker-machine ssh ranchang
[docker@ranchang ~]$
```

# Rancherのインストール
Rancher Serverのコンテナを作成します。
Dockerコマンドが何を意味しているのかはググってもらうとして...。

```
[docker@ranchang ~] docker run -d \
--restart=unless-stopped \
-p 8080:8080 \
--name=rancher-server \
--hostname=rancher-server \
rancher/server

（略）

[docker@ranchang ~]$ docker container ls
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                              NAMES
425008c0dfcb        rancher/server      "/usr/bin/entry /u..."   43 seconds ago      Up 42 seconds       3306/tcp, 0.0.0.0:8080->8080/tcp   rancher-server
```

インストールが終わったら、ホストIPの8080ポートにアクセスします。
以下が見えたらOK。チェックボックスのチェックを外してGot itします。
（この匿名送信系はデフォルトで無効にしてほしい...）

<img width="443" alt="2018-04-28_16h24_35.png" src="https://qiita-image-store.s3.amazonaws.com/0/161568/23751d70-09c7-e749-2099-8a189da58ba5.png">

ホスト追加しろといわれてるので、します。
<img width="744" alt="2018-04-28_16h31_53.png" src="https://qiita-image-store.s3.amazonaws.com/0/161568/7398b0c2-1be5-5162-7387-8f0321a315c9.png">

IPとかあってたらそのままSave。
<img width="547" alt="2018-04-28_16h33_01.png" src="https://qiita-image-store.s3.amazonaws.com/0/161568/bf09867e-5b30-ca89-bbbd-6d688f98fea4.png">

以下の画面が表示されるので、5の右のアイコン？をクリックする。
これで、左に表示されているコマンドがクリップボードにコピーされる。
<img width="726" alt="2018-04-28_16h35_59.png" src="https://qiita-image-store.s3.amazonaws.com/0/161568/c2c9ab2a-f2c8-903d-0829-4dbf8080b65b.png">

コピーしたコマンドをranchang上で実行する。
実行したのち、Rancherのページの上部メニューで「INFRASTRUCTURE」->「Hosts」を選択。
以下のように、ホストが登録されていればOK。

<img width="528" alt="2018-04-28_16h41_24.png" src="https://qiita-image-store.s3.amazonaws.com/0/161568/2e3983a8-750f-7c3e-22b5-d593f146a43f.png">

# ConcourseのPrivate Catalogを作る
カタログって何だよって人は[これ](https://www.slideshare.net/m-daichang/rancher-compose)見てください。
要するに、Rancherで「あのサービス使いたいなぁ」と思った時にボタン数発でサクッとその一連のサービスを立ち上げるための設計書みたいなものです。

[公式のdocker-compose](https://github.com/concourse/concourse-docker/blob/master/docker-compose.yml)を参考に作成したPrivate Catalogが[こちら](https://github.com/hasegit/rancher-concourse)です。
後で使うので、以下の図のところでURLをこぴっておいてください。
<img width="754" alt="2018-04-28_19h59_41.png" src="https://qiita-image-store.s3.amazonaws.com/0/161568/3b539184-6c55-bac7-bc75-f2309552a149.png">


では、Private Catalogを追加していきます。
Rancherのページの上部メニューより「CATALOG」->「ALL」を選択。
表示された画面の右側の「Manage」をクリックします。

<img width="1049" alt="2018-04-28_19h39_19.png" src="https://qiita-image-store.s3.amazonaws.com/0/161568/8b241da7-cc57-54aa-467e-6e0cc5d9dd76.png">

「Add Catalog」をクリックするとリストの下に入力できる箇所が増えるので、左にカタログのグループ？名、真ん中に使いたいカタログのgitのURL(今回は先ほどこぴったもの)、右にそのカタログのブランチ名を入力して、「Save」をクリック。

<img width="739" alt="2018-04-28_19h53_26.png" src="https://qiita-image-store.s3.amazonaws.com/0/161568/d3285e9c-6da4-18f1-b1d2-1ab4a4bd0a89.png">

うまく登録できれば、CATALOGメニューにcustomが増えているはず。
勿論、ご自身でPrivate Catalog作るに越したことはないです。

# Concourseの設定と起動
Catalogは準備できたので、いよいよ起動します。

まず、Concourse起動時の設定を行うので、ConcourseのCatalogのViewをクリック。
<img width="250" alt="2018-04-28_20h06_39.png" src="https://qiita-image-store.s3.amazonaws.com/0/161568/dd7b52ea-bdf9-af26-857c-afa798abf937.png">

ページ下部にConfiguration Optionsがあるので、よしなにいじったあと、更に下部の「Launch」をクリックします。
尚、Concourseは本来8080がデフォルトポートなのですが、Rancherと見事にバッティングしてるので、8080は使わないでください。
<img width="1016" alt="2018-04-28_20h07_42.png" src="https://qiita-image-store.s3.amazonaws.com/0/161568/8fc9ce9b-7443-8475-2766-9630f67bf541.png">

Launchクリック後、自動的にStackのページに飛びます。
ここのステータスがすべてActiveになった後、おもむろにポート番号のリンクをクリックし、
<img width="1063" alt="2018-04-28_20h12_11.png" src="https://qiita-image-store.s3.amazonaws.com/0/161568/591b0a25-3523-f939-5947-174bd69d9047.png">

Concourseの画面[^2]が出たら成功です。Optionsで設定したユーザー/パスワードが有効かをログインして確認してみてもよいでしょう。
<img width="339" alt="2018-04-28_20h17_03.png" src="https://qiita-image-store.s3.amazonaws.com/0/161568/34258cb9-bdc3-292f-a7a9-6ecfcdce1879.png">

Concourseの使い方はスコープ外ですので、この辺で失礼いたします。

---
##### 脚注
[^1]: Docker for windowsはHyper-Vを利用するので、貧乏Homerは指を咥えて見ているしかないんだよ。
[^2]: ペンギンの存在感が圧倒的過ぎて大体目に付く。