DockerMachine で AWS, GCE に インスタンス を 作成


TL;DR

DockerMachineを使ってAWS(EC2)とGCP(GCE)にインスタンスを作成する方法です。

今回はnginxの起動まで行います。


ローカルでDockerMachineを使ってみる

Virtualboxを使用し、dockerホストを作成(defaultは任意)

$ docker-machine create --driver virtualbox default

ホストが作成されたかを確認

$ docker-machine ls

NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
default - virtualbox Running tcp://XXX.XXX.XXX.XXX:2376 v18.09.0

defaultを操作対象のホストするための設定コマンドを表示

$ docker-machine env default

export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://XXX.XXX.XXX.XXX:2376"
export DOCKER_CERT_PATH="/Users/user_name/.docker/machine/machines/default"
export DOCKER_MACHINE_NAME="default"
# Run this command to configure your shell:
# eval $(docker-machine env default)

一番下のコマンドを実行することで、一括で設定することができる

$ eval $(docker-machine env default)

$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
default * virtualbox Running tcp://XXX.XXX.XXX.XXX:2376 v18.09.0

試しにnginxをインストールしてみる

$ docker run -d -p 8000:80 nginx

$ docker-machine ip default
XXX.XXX.XXX.XXX

表示されるipアドレスの8000ポートにアクセス

スクリーンショット 2019-01-04 20.01.37.png

アクセスできました!


AWS(EC2)でやってみる

まずは、AWSにアクセスし、IAMからアクセスキーIDと シークレットアクセスキーを取得

credentialsファイルを作成しておくと便利!

$ vim ~/.aws/credentials

[default]
aws_access_key_id = XXXXXXXXXXXXXXX
aws_secret_access_key = XXXXXXXXXXXXXXXXXXXXXX


ローカルと同じようにdocker-machine create コマンドを使用

driverにはamazonec2を指定

ポート番号とリージョンも指定

$ docker-machine create \

--driver amazonec2 \
--amazonec2-open-port 8000 \
--amazonec2-region ap-northeast-1 \
aws-host

(省略)
Docker is up and running!
To see how to connect your Docker Client to the Docker Engine running on this
virtual machine, run: docker-machine env aws-host

操作ホストの設定を変更

$ eval $(docker-machine env aws-host)

nginxイメージをrun

$ docker run -d -p 8000:80 --name webserver nginx

ipアドレスを確認

$ docker-machine ip aws-host

XXX.XXX.XX.XXX

表示されたipアドレスの8000番ポートにアクセスすればok!


インスタンスの止め方

$ docker-machine stop aws-host

Stopping "aws-host"...
Machine "aws-host" was stopped.


インスタンスの削除

$ docker-machine rm aws-host

About to remove aws-host
WARNING: This action will delete both local reference and remote instance.
Are you sure? (y/n): y
Successfully removed aws-host

これで削除完了!


今度はGCP(GCE)でやってみる

まずはGCPにアクセスしサービスアカウントを作成

keyをダウンロードしプロジェクトIDも取得しておく(ホームから確認できる)

keyPATHに追加する必要があるためexportコマンドで追加する

$ export GOOGLE_APPLICATION_CREDENTIALS={PATH}


ローカル,AWSと同じようにcreateする

driverにはgoogleを指定

google-projectには作成してあるproject名を指定

google-zoneには適当なリージョンを指定(この場合は東京)

$ docker-machine create \

--driver google \
--google-project project名 \
--google-zone asia-northeast1-a \
gcp-host
(省略)
Docker is up and running!
To see how to connect your Docker Client to the Docker Engine running on this
virtual machine, run: docker-machine env gcp-host

操作ホストの設定変更

$ eval $(docker-machine env gcp-host)

nginxイメージをrun

$ docker run -d -p 8000:80 --name webserver nginx

ipアドレスを確認

$ docker-machine ip gcp-host

XXX.XXX.XX.XXX

表示されたipアドレスの8000番ポートにアクセスすればok!


但し、GCPはファイヤーウォール設定を行い8000番をアクセス可能にしておく必要があります。

インスタンスの閉じ方は同じなので割愛。。。


以上、docker-machineを使用したインスタンスの作成方法でした!