docker イメージ を GCE で起動する方法

# 目的
ローカルで作成したdockerイメージ(webサーバなど)を作成し、Google Cloud へのアップし起動する方法を忘れるので、調べた内容をメモします

# 目次
1. ローカルの docker イメージ を Google Container Registry にアップ
2. Google Cloud Console で GCE(VMインスタンス) の作成

# 事前準備
- Google Cloud Console で プロジェクトの作成
- [PC へ google cloud sdk(gcloud CLI) のインストール][gcloud]
- docker の インストール
- docker イメージを PC上に 作成済みと仮定

# 手順

## 1. ローカルの docker イメージ を Google Container Registry にアップ

### アップする docker イメージ のタグづけ

Google Container Registry の　サイトを参照すると以下の通りです。

```
docker tag [SOURCE_IMAGE] [HOSTNAME]/[PROJECT-ID]/[IMAGE]
```

ざっくり説明すると、、、

- SOURCE_IMAGE：ローカルの docker イメージの名称
- HOSTNAME：Google Container Registry のローケーション。[今回は一番安いusリージョンで対応することを前提とします][image]
- PROJECT-ID：Google Cloud Console で 作成した プロジェクトID
- IMAGE：適切な名称

です。

具体的には以下のように、作成します(HOSTNAME以外のパラメータは適当です)。

```
docker tag test us.gcr.io/test-123456/test
```

### イメージの push

事前準備として、Container Registry を認証する必要があり、gcloud を Docker 認証ヘルパーとして使用します。使用方法は以下の通りです。

```
gcloud auth configure-docker
```

Google Container Registery へ docker イメージを push します。

```
docker push us.gcr.io/test-123456/test
```


## 2. Google Cloud Console で GCE(VMインスタンス) の作成

### GCE(VMインスタンスの作成)

Google Cloud Console にて、該当プロジェクト　にて、
Compute Engine -> VMインスタンス
を選択する

![スクリーンショット 2019-01-19 0.15.28.png](https://qiita-image-store.s3.amazonaws.com/0/232494/d3a4f198-7ea7-d167-3bdb-ce4090cd76c9.png)

インスタンス一覧画面にて、「インスタンスを作成」を選択する
以下を変更後、「作成」ボタンを選択する
- 名前：任意の名称
- リージョン：us-east1
- コンテナ：チェックを入れる
- コンテナイメージ：pushしたdockerイメージ（us.gcr.io/test-123456/test）
- マシンタイプ：micro(共有vCPU x 1)*起動後、パフォーマンスが足りない時にはインスタンス一覧画面でリコメンドあり*
- ファイアウォール：HTTPトラフィックを許可

![スクリーンショット 2019-01-19 0.22.11.png](https://qiita-image-store.s3.amazonaws.com/0/232494/04fc997a-0562-d717-f09f-459ed00a8eca.png)

![スクリーンショット 2019-01-19 0.22.46.png](https://qiita-image-store.s3.amazonaws.com/0/232494/77a9440e-77fe-292c-3771-d9b44ca2fb13.png)

### GCEのポートの解放
docker で 80ポート以外を利用している場合には、GCE　のポートの開放が必要です。
今回は、default の http のポートに 8050 を追加します
※　本来はファイアウォールルールを追加して、VMインスタンスでルールを指定する方が望ましいです

Google Cloud Console にて、該当プロジェクト　にて、
VPNネットワーク -> ファイアウォール -> default-allow-http の項目を選択 -> 「編集」
を選択し
プロトコルとポート　の　指定したプロトコルとポート　を以下の通り、変更後、「保存」ボタンを押す。

```
tcp:80,8050
```

![スクリーンショット 2019-01-19 0.52.16.png](https://qiita-image-store.s3.amazonaws.com/0/232494/5bf6f31f-c8a8-b4bd-5527-d4867db8baa6.png)

### インスタンスの起動

Google Cloud Console にて、該当プロジェクト　にて、
Compute Engine -> VMインスタンス
を選択し、作成したインスタンス　に　チェックを入れ、　右上の「開始」ボタンを押す

数分後、インスタンスが起動し、外部IP　が振られるので、そのIPを利用し、接続確認を行なう


# 今後の課題
http での接続では、リクエスト/レスポンスの内容が丸見えになってしまい気持ちが悪いので、
GCE へのアクセスを https で接続したい

# 参考URL
- [google cloud sdk のインストール][gcloud]
    - https://cloud.google.com/sdk/docs/quickstarts?hl=ja
- [Docker Imageを使ってGoogle Compute Engineにデプロイしてみる](http://tech.innovation.co.jp/2018/03/19/Docker-Image-Google-Compute-Engine.html)
    - http://tech.innovation.co.jp/2018/03/19/Docker-Image-Google-Compute-Engine.html
- [イメージの push と pull][image]
    - https://cloud.google.com/container-registry/docs/pushing-and-pulling?hl=ja 
- [VM およびマネージド インスタンス グループへのコンテナのデプロイ](https://cloud.google.com/compute/docs/containers/deploying-containers)
    - https://cloud.google.com/compute/docs/containers/deploying-containers

[image]:https://cloud.google.com/container-registry/docs/pushing-and-pulling?hl=ja 
[gcloud]:https://cloud.google.com/sdk/docs/quickstarts?hl=ja