Edited at

ContainerRegistry(GCR)に登録されたDockerイメージをGCE上で動かす


ContainerRegistryに登録したDockerイメージをGCE上で動かしたい!

※以前書いた下記記事の続きです

・ローカルからContainerRegistry(GCR)にDockerイメージをpushする

https://qiita.com/issei_0403/items/c27b2c30adf0455a6218

・werckerのdocker-pushでDockerイメージをContainer Registry(GCR)に登録する

https://qiita.com/issei_0403/items/d2197a7756cbd1de5b49


............ContainerRegistry(GCR)に登録されているDockerイメージをGCEに乗っけてJavaのバッチ処理を動かしたいです!!!!!!!

というわけで本題に入ります。


GCEインスタンス作成

何はともあれインスタンスを作りましょう。

『このVMインスタンスにコンテナイメージをデプロイする。』にチェックをつけ、ブートディスクの種類はContainer-Optimized OSを選択します。

スクリーンショット 2019-04-17 17.55.44.png

コンテナイメージについては、GCRの画面上で確認して入力してください。『gcr.io/【プロジェクトID】/イメージ名』って感じです。

スクリーンショット 2019-04-17 18.06.01.png

サービスアカウントについては、本インスタンスから他サービスに対する権限がないとダメなので、適宜設定してください。私の場合DB接続したりするので、下記の通り設定しました。

スクリーンショット 2019-04-17 18.36.44.png


cloud-initの設定

GCEインスタンス上にのせたDockerコンテナがどういう挙動をするかをここで設定します。

スクリーンショット 2019-04-17 18.12.11.png

key、valueの組み合わせで設定します。

具体的には、、、


google-logging-enabled

true


user-data

#cloud-config

users:
- name: cos-user

runcmd:
- sudo usermod -aG docker cos-user
- sudo -u cos-user docker-credential-gcr configure-docker
- sudo -u cos-user docker run -it gcr.io/【プロジェクトID】/【イメージ】 > /var/log/cloud-init.log
- shutdown -h now


gce-container-declaration

  containers:

- name: 【イメージ】
image: gcr.io/【プロジェクトID】/【イメージ】
stdin: false
tty: false
restartPolicy: Never

# This container declaration format is not public API and may change without notice. Please
# use gcloud command-line tool or Google Cloud Console to run Containers on Google Compute Engine.

※今回は一度切り動いてくれればいいbatch的な処理なので、restartPolicy: Neverとしています。Alwaysにすると、Dockerコンテナのプロセスが終了→起動を繰り返すような動きになります。

インスタンスが作成されると、一覧に表示されます。

スクリーンショット 2019-04-17 18.08.41.png


ほんとに動いてるか確認する

インスタンス一覧のSSHをクリックしてインスタンス内に入ります。

$docker ps -a

でcontainer idを確認して、

$docker logs 【container id】

でログが見れるはずです。

また、/var/log/cloud-init.logにログを出力するよう設定しているので、

インスタンス一覧の右側にあるボタン→ログを表示でstack driverでも確認できます。

スクリーンショット 2019-04-17 18.24.16.png