#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を選択します。
コンテナイメージについては、GCRの画面上で確認して入力してください。『gcr.io/【プロジェクトID】/イメージ名』って感じです。
サービスアカウントについては、本インスタンスから他サービスに対する権限がないとダメなので、適宜設定してください。私の場合DB接続したりするので、下記の通り設定しました。
#cloud-initの設定
GCEインスタンス上にのせたDockerコンテナがどういう挙動をするかをここで設定します。
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コンテナのプロセスが終了→起動を繰り返すような動きになります。
#ほんとに動いてるか確認する
インスタンス一覧のSSHをクリックしてインスタンス内に入ります。
$docker ps -a
でcontainer idを確認して、
$docker logs 【container id】
でログが見れるはずです。
また、/var/log/cloud-init.logにログを出力するよう設定しているので、
インスタンス一覧の右側にあるボタン→ログを表示でstack driverでも確認できます。