Tutum by Docker on AWS/Azure

Dockerに買収されたTutumがどれだけ便利なのか使ってみました。
http://japan.zdnet.com/article/35072328/

# nodeを作成する
この辺りは、ググると色々と出てくるのでさらっと。
tutumではdockerのhostになるサーバーをnodeと呼ぶ。まずは、nodeを立ててみる。
## Cloud連携
今回は試しに、AWSとAzureにnodeを立ててみますが、下にあるようにその他のクラウドサービスも使えるようです。また、やってないですがオンプレのサーバーとも連携出来ます。

![スクリーンショット 2015-12-23 17.48.22.png](https://qiita-image-store.s3.amazonaws.com/0/62421/4c292643-d090-abeb-638b-e24f2946ba96.png "スクリーンショット 2015-12-23 17.48.22.png")

Link accountから指示に従うだけなので相当簡単にlink可能でした。

## AWSとAzureに1台ずつnodeを作成

![スクリーンショット 2015-12-23 17.58.27.png](https://qiita-image-store.s3.amazonaws.com/0/62421/543bb603-69b2-c172-952f-d7ea6249487b.png "スクリーンショット 2015-12-23 17.58.27.png")

これも指示に従ってクリックしていくだけなので簡単にnodeが二つたちます。
AWSとAzureにそれぞれたちました。

## nodeの上にコンテナ(Service)を起動する

今回はテストなのでtutumが提供しているサンプルコンテナを起動します。
外部からアクセスする為には、PortsをPublishedに設定しておく必要があるので注意。

![スクリーンショット 2015-12-23 18.02.35.png](https://qiita-image-store.s3.amazonaws.com/0/62421/77b114c9-b18a-1cdf-c987-4cdfc5f3db11.png "スクリーンショット 2015-12-23 18.02.35.png")

### AWSのnodeに1つコンテナが起動した
![スクリーンショット 2015-12-23 18.04.16.png](https://qiita-image-store.s3.amazonaws.com/0/62421/028f4cea-fd55-657f-801c-8843c2d1aca6.png "スクリーンショット 2015-12-23 18.04.16.png")

### もう一台起動すると今度はAzureのnodeにコンテナが起動する
これは、起動する時にDeployment strategyを一番空のnodeを優先するようにしているため。

![スクリーンショット 2015-12-23 18.05.47.png](https://qiita-image-store.s3.amazonaws.com/0/62421/9fce73a4-932b-31a7-86c3-ab4f7d140ebf.png "スクリーンショット 2015-12-23 18.05.47.png")

### Azureのnodeを落としてみると

Azureのnodeをterminateしてみると、しばらくした後にAWS側のnodeにコンテナが移動している事が分かる。
これは素晴らしい。

![スクリーンショット 2015-12-23 18.43.19.png](https://qiita-image-store.s3.amazonaws.com/0/62421/1763dd44-9295-d7d0-0067-8bae473c0d5c.png "スクリーンショット 2015-12-23 18.43.19.png")

# ネットワークがどうなっているのか
## コンテナ間の通信
AWS側のコンテナ(10.7.0.4)からAzure側のコンテナ(10.7.0.5)にpingを打ってみる。
![スクリーンショット 2015-12-23 18.19.29.png](https://qiita-image-store.s3.amazonaws.com/0/62421/455fc4d8-028b-974d-0e4f-6681b1da2a26.png "スクリーンショット 2015-12-23 18.19.29.png")

問題なく通るので、クラウド間を意識せずに通信が出来ている。
このTerminal機能は地味に嬉しい。

## nodeのネットワークを見てみる
### tutumのnodeにsshする
nodeにsshする方法は本家のドキュメントに書いてある通り。
https://support.tutum.co/support/solutions/articles/5000553071-sshing-into-a-tutum-node

tutum/authorizedkeysというtutumで用意されているコンテナをstack(docker composerみたいな物)を使って起動すると、このコンテナ経由でsshの鍵がnode側に設定されます。
実行するとすぐにterminatedになるので一瞬焦るがsshは出来るようになっている。

### docker ps
ssh後、docker psを打つと色々と起動している事が分かります。

![スクリーンショット 2015-12-23 18.32.38.png](https://qiita-image-store.s3.amazonaws.com/0/62421/fdf0d635-020f-66eb-f382-d85ef0619f6d.png "スクリーンショット 2015-12-23 18.32.38.png")

weaveとあるので、クラウド間の通信はweaveを使っている様子。
crondが起動していたり、metricsを取る用のコンテナがいたり、ntpdがいたり。

### ifconfig weave

weaveの設定は正直良く分からないが、weave用のネットワークインターフェースが追加されていて、ここで他のコンテナと通信しているっぽい。
この辺りが詳しかった。
http://qiita.com/nmatsui/items/a7caa5a3840b8c920124

![スクリーンショット 2015-12-23 18.34.27.png](https://qiita-image-store.s3.amazonaws.com/0/62421/b1dd88a4-a548-4b2e-9e24-c6c72295a752.png "スクリーンショット 2015-12-23 18.34.27.png")

# セキュリティ
AWSでは起動時に自分でセキュリティグループを指定させられたが、Azureの場合には自動で使うポートが設定されていた。

![スクリーンショット 2015-12-23 18.39.27.png](https://qiita-image-store.s3.amazonaws.com/0/62421/dcf4ccb6-500a-8402-7f3f-41dad6e70aee.png "スクリーンショット 2015-12-23 18.39.27.png")

dockerがtcpの2375、コンテナがtcpの32769、weaveがtcpとudpの6783を使用しているという、分かりやすい構成。
今回はテストだが実際に何らかの用途で使用する場合にはIP制限など入れたいところ(tutumからのアクセスでIPを制限出来るのだろうか？)。

# まとめ
簡単にクラウドと連携出来たり、nodeに関係なくサービスが使えたりと結構便利な印象。
とはいえ、今稼働させているアプリケーションをどんな形で展開するか？みたいなところまでは考えていない(tutumというかdockerの話になるが)。
tutumに関しては、Dockerに買収されて今後ますます便利になりそうな予感しかしないので引き続き要チェック。
折角のコンテナなので、Amazon ECSなどで特定のクラウドに縛られるよりはこちらを使う方が良いかなとは思う。