docker-machineで起動する
docker-machine
は、Amazon EC2のドライバーが提供されているのでAWS上にDockerを起動
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
あとは環境変数をセットするだけ
環境変数をセット
$ 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
を作成
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を確認する
接続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のデータを隔離する
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