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

#TL;DR
DockerMachineを使ってAWS（EC２）と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ポートにアクセス
<img width="726" alt="スクリーンショット 2019-01-04 20.01.37.png" src="https://qiita-image-store.s3.amazonaws.com/0/204220/e186e097-8d38-f8a4-4bde-b07d389ee20f.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`も取得しておく（ホームから確認できる）
`key`を`PATH`に追加する必要があるため`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を使用したインスタンスの作成方法でした！