AWSのEC2でDockerを試す

##docker-machineで起動する

`docker-machine`は、Amazon EC2のドライバーが提供されているのでAWS上にDockerを起動

````lang:Dokerホストの起動
$ docker-machine create --driver amazonec2 \
--amazonec2-access-key XXXXXXXX \
--amazonec2-secret-key YYYYYYYY \
--amazonec2-region "ap-northeast-1" \
--amazonec2-zone b \
--amazonec2-subnet-id subnet-ZZZZZ \
--amazonec2-vpc-id vpc-VVVVVV \
aws01
```

###zoneを指定しないとエラーが出る
`--amazonec2-zone b \`を除くとデフォルトで`availabilty zone A`に作ろうとするので注意

このようなエラーが出てしまう

```
(aws02) Launching instance...
Error creating machine: Error in driver during machine creation: Error launching instance: InvalidParameterValue: Value (ap-northeast-1a) for parameter availabilityZone is invalid. Subnet 'subnet-754a7b01' is in the availability zone ap-northeast-1b
        status code: 400, request id:
```

それで`docker-machine ls`をすると

```
aws02   -        amazonec2   Error                                       Unknown   MissingParameter: The request must contain the parameter InstanceId
        status code: 400, request id:
```

が残ってしまうので強制消去の`-f`を付与して消す

```
$ docker-machine rm -f aws02
About to remove aws02
Successfully removed aws02
```


##起動の確認

```起動の確認
$ docker-machine ls
NAME    ACTIVE   DRIVER      STATE     URL                         SWARM   DOCKER    ERRORS
aws01   *        amazonec2   Running   tcp://54.238.YYY.XXX:2376           v1.11.1
```

あとは環境変数をセットするだけ

```lang:環境変数をセット
$ docker-machine env aws01
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://54.238.YYY.XXX:2376"
export DOCKER_CERT_PATH="/root/.docker/machine/machines/aws01"
export DOCKER_MACHINE_NAME="aws01"
$ Run this command to configure your shell:
$ eval $(docker-machine env aws01)
```
最後の行の
`eval $(docker-machine env aws01)`を実行

##Wordpressのコンテナを作成
Wordpressを作成するために`docker-compose.yml`を作成

```lang:docker-compose.yml
wordpress:
  image: wordpress
  links:
    - db:mysql
  ports:
    - 80:80

db:
  image: mariadb
  environment:
    MYSQL_ROOT_PASSWORD: password
```

##コンテナの起動
`docker-compose.yml`があるディレクトリで以下のコマンドを実行

```
$ docker-compose up -d

```

##コンテナーが起動したかを確認
```
# docker-compose ps
     Name                    Command               State          Ports
-------------------------------------------------------------------------------
ec2_db_1          docker-entrypoint.sh mysqld      Up      3306/tcp
ec2_wordpress_1   /entrypoint.sh apache2-for ...   Up      0.0.0.0:80->80/tcp
```

##試しにWEBで見てみる
まずは接続するIPを確認する

```lang:接続IPの確認
$ docker-machine ls
NAME    ACTIVE   DRIVER      STATE     URL                       SWARM   DOCKER    ERRORS
aws01   *        amazonec2   Running   tcp://54.238.YYY.XXX:2376           v1.11.1
```
WEBでアクセス
http://54.238.YYY.XXX


##ついでにコンテナーの内容を閲覧
何をしているかというとbashを外部コマンドとして実行している

```
$ docker exec  -it ec2_web02_1 bash
```

##おまけでデータの永続性
busyboxを使ってログとコンテンツ、DBのデータを隔離する

```lang:docker-compose.yml
vol_data:
  image: busybox:latest
  volumes:
   - /var/www/html:/var/www/html
   - /var/log/httpd:/var/log/httpd
   - /var/lib/mysql:/var/lib/mysql

web01:
  image: wordpress:latest
  links:
    - db01:mysql
  ports:
    - 80:80
  volumes_from:
    - vol_data
    - 
db01:
  image: mariadb
  environment:
    MYSQL_ROOT_PASSWORD: P@ssw0rd
  volumes_from:
    - vol_data
```