[Docker]複数ホスト管理ツールのまとめ


# はじめに
[Docker Operations](https://training.docker.com/self-paced-training)のメモ。

以下のツールについて書いてある

- Docker Machine
- Docker Swarm
- Docker Compose

Docker Composeは実際に手を動かしてないので、後日実際に動かして追記する。


# Docker Machine
## ひとことで言うと
複数の環境に、Dockerのホストを構築する。
![DockerMachine2.png](https://qiita-image-store.s3.amazonaws.com/0/14275/86b467e4-d368-9f7a-d443-6cba7c20f74c.png "DockerMachine2.png")
出典 : https://training.docker.com/self-paced-training


## インストール(ubuntuの場合)

```
$ wget https://github.com/docker/machine/releases/download/v0.2.0/docker-machine_linux-amd64
$ sudo mv docker-machine_linux-amd64 /usr/local/bin/docker-machine
$ sudo chmod 755 /usr/local/bin/docker-machine
$ docker-machine -v
docker-machine version 0.2.0 (8b9eaf2)
```

## docker machine経由でAmazon EC2にホストを追加(東京リージョン)
東京リージョンに、最新版のAmazonLinux OSを元に立ち上げる。
アクセスキーなどが必要なので、AWSのIAMから、事前にcredentials情報を持ってくる。

その他インスタンスサイズなども指定できる。
詳しくは[こちら](https://docs.docker.com/machine/drivers/aws/)。

```
$ docker-machine create --driver amazonec2 \
--amazonec2-access-key AKIAIVZOXTFWY2PTRL2Q \
--amazonec2-secret-key <SECRET KEY> \
--amazonec2-region ap-northeast-1 \
--amazonec2-vpc-id vpc-9fcb6dfa \
--amazonec2-ami ami-b36d4edd \
aws01
```

サーバのタグで、「NAME=aws01」のインスタンスが立ち上がる。

ちゃんと管理できてるか確認。

```
$ docker-machine ls
aws01            amazonec2   Running   tcp://54.238.232.136:2376
aws02            amazonec2   Running   tcp://54.238.232.139:2376

$ docker-machine ssh aws01
Welcome to Ubuntu 15.10 (GNU/Linux 4.2.0-18-generic x86_64)

 * Documentation:  https://help.ubuntu.com/

  Get cloud support with Ubuntu Advantage Cloud Guest:
    http://www.ubuntu.com/business/services/cloud

New release '16.04 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


*** System restart required ***
ubuntu@aws01:~$
```

ちゃんとログインできる。

# Docker Swarm
## ひとことで言うと
一つのホストから、設定した子ノードに対しコマンドを実行する。
![DockerSwarm.png](https://qiita-image-store.s3.amazonaws.com/0/14275/c002c7ca-14a7-403b-83cd-2c5dc21ac640.png "DockerSwarm.png")
出典 : https://training.docker.com/self-paced-training

## インストール
Docker imageから持ってこれる。
Swarmを動かす管理サーバで以下のコマンドを設定。

```
$ docker run --rm swarm create # --rm : 一度走らせたら削除する
Unable to find image 'swarm:latest' locally
latest: Pulling from library/swarm
1e61bbec5d24: Pull complete
8c7b2f6b74da: Pull complete
245a8db4f1e1: Pull complete
Digest: sha256:661f2e4c9470e7f6238cebf603bcf5700c8b948894ac9e35f2cf6f63dcda723a
Status: Downloaded newer image for swarm:latest
647827dc0d841af8a1d15a5dc0143cca

$ vim clustertoken 
647827dc0d841af8a1d15a5dc0143cca

docker run -d -P swarm manager token://647827dc0d841af8a1d15a5dc0143cca
```

## ノードサーバでの作業

Swarmのコマンドを指定するサーバで、以下のコマンドを事項。

```
$ sudo service docker stop
$ sudo vim /default/docker
# 以下の部分を追記
DOCKER_OPTS="-H 0.0.0.0:2375"
$ DOCKER_HOST=localhost:2375
$ export DOCKER_HOST
$ sudo service docker start
$ docker -run -d swarm join --addr=<サーバのパブリックIP>:2375 token://<管理サーバで発行されたトークン>

```

## 管理サーバでコマンドを実行
※ 実際に動かせてないので、後日追記する。

```
$ docker info
# 設定したノードの情報
$ docker run -d -P nginx
# 各ノードにnginxイメージが作られる
```


# Docker Compose
## ひとことで言うと

複数のアプリケーション用コンテナを一度につくる
![DockerCompose.png](https://qiita-image-store.s3.amazonaws.com/0/14275/91d42b09-d2ff-085e-0436-0b85ffbfec8e.png "DockerCompose.png")
出典 : https://training.docker.com/self-paced-training


## ざっくり説明
docker-compose.ymlにコンテナの全設定を記載しておく。

## docker-compose.ymlの書式

```
service01:
  build: .
  comand: xxxx
  links:
    - service02
service02:
  image: redis
  
```

`docker-compose up`で全コンテナが作られる。
※ 実際に動かしてないので、後日追記する

# まとめ

docker、こんなこともできるのか。
ちゃんと動かしてなかったから知らなかったけど、すごい応用が効く。