Apache Mesos + Marathon + Chronos を 10 分で試す

Mesos の起動、Qiita には [Vagrant を使う例](http://qiita.com/TsuyoshiUshio@github/items/9d8f5b952b635d94ae6f) があり、仮想サーバを実際に複数台立てた場合の挙動を見るには有用ですが、もっと気軽に、最新の Marathon の挙動を見たい程度であればちょっと重い気もします。

ので、**docker-compose でサクッと起動できる**ものを使います。
初回起動まで 10 分[^1] ほどでした。2 回目以降は超速。

# 起動確認まで

## 1. git clone

https://github.com/bobrik/mesos-compose

```sh:git-clone
git clone https://github.com/bobrik/mesos-compose
cd mesos-compose
```

## 2. 起動

**Docker Quickstart Terminal を起動**[^2] して、

```sh:start-services
export DOCKER_IP=$(docker-machine ip)
echo $DOCKER_IP
make start
```

16.07.03 現在、以下の Docker イメージを pull します。
どれもかなり新しいバージョンですね[^3] :)

| image | tag | transfer data size |
|:-----|:----|------------------------:|
| bobrik/zookeeper | latest | 158 MB |
| mesosphere/mesos-master | 1.0.0-1.0.59.rc1.ubuntu1404 | 208 MB |
|mesosphere/mesos-slave | 1.0.0-1.0.59.rc1.ubuntu1404 | 208 MB |
|mesosphere/marathon | v1.2.0-RC3 | 359 MB |


## 3. ログ確認 & 接続

Mesos 自体のログはこれでみれます。

```sh:tail-logs
$ docker-compose logs -f
```

ブラウザから Web UI に接続してみましょう。

Mesos: [http://$DOCKER_IP:5050/](http://192.168.99.100:5050/)
Marathon: [http://$DOCKER_IP:8080/](http://192.168.99.100:8080/)


# Marathon でアプリを起動

GitHub の README に従えば

```sh:run-example-app
make APP=example deploy
```

これでサンプルが起動しますが、起動画面がつまらないので Marathon の GUI から別のアプリを起動してみます。

## 1. Marathon の Web UI に接続

Marathon: [http://$DOCKER_IP:8080/](http://192.168.99.100:8080/)

## 2. アプリ作成

2.1. `Create Application` を押して

<img width="500" alt="0.png" src="https://qiita-image-store.s3.amazonaws.com/0/66457/c7ff3ede-a339-d732-eb3a-d6986b7c5e54.png">

2.2. `ID` を指定。例えば `/hello` など。 

<img width="500" alt="1.png" src="https://qiita-image-store.s3.amazonaws.com/0/66457/9d5579fb-e083-b43f-1fd5-9d5608ca98f3.png">

2.3. 左の `Docker Container` メニューを開き、`Image` には `dockercloud/hello-world` を入力、`Network` は `Bridged` を選択。

<img width="500" alt="2.png" src="https://qiita-image-store.s3.amazonaws.com/0/66457/86e7adfe-de14-9edc-7783-a56095cd47b1.png">

2.4. 左の `Ports` メニューを開き、`Container Port` に `80` を入力して、右下の `Create Application` を押します。

<img width="500" alt="3.png" src="https://qiita-image-store.s3.amazonaws.com/0/66457/f8cecfdf-5548-6d57-f954-2aa25fbc0921.png">

## 3. アプリへの接続

3.1. Marathon のアプリ一覧画面で該当のアプリの `Status` が `Running` になったら、先ほど指定した `ID` をクリック。

<img width="500" alt="4.png" src="https://qiita-image-store.s3.amazonaws.com/0/66457/fd0dda28-f4c1-df0e-cbd9-6af663d1375a.png">

3.2. ID 欄の下に、エンドポイントが表示されています。これをクリックしましょう！

<img width="500" alt="5.png" src="https://qiita-image-store.s3.amazonaws.com/0/66457/cab838c6-e3e0-69a4-2e7e-4ec37fa22ee8.png">

繋がりましたか？
あとは Marathon-LB でロードバランスしたり、ノードを増やしたり、アプリケーションをスケールさせたりすることになります。


# 停止

以下のコマンドで停止します。

```sh:stop-services
make destroy
```

もしくは docker-compose コマンドでも OK。

```sh:stop-services
docker-compose stop
docker-compose rm -a
```

ただし、Marathon で起動したアプリは掃除してもらえません。
別途 stop なり rm しましょう。


# その他オプション

GitHub の README に記載がありますが一応。

##・2 つめの Mesos Slave を起動する

`docker-compose.yml` の `slave-two:` 以下のコメントを外し起動し直します。

##・Chronos を起動する

`docker-compose.yml` の `chronos:` 以下のコメントを外し起動し直します。Chronos の Web UI はポート 8888 で待機します。
[http://$DOCKER_IP:8888/](http://192.168.99.100:8888/)

　

[^1]: 我が家の Wifi はだいたい 3.8MB/sec
[^2]: Docker for Mac / Windows（ネィテイブアプリ）には未対応
[^3]: bobrik さんが定期的にメンテしているご様子