share facebook facebook facebook twitter twitter menu hatena pocket slack

2019.11.20 WED

DockerコンテナからGoogle Cloud SDKのコマンドを簡単に実行できるコマンドをつくってみた

甲斐 甲

WRITTEN BY 甲斐 甲

なるべくDockerを利用して手元の端末を汚さない試み。便利かはわかりません。

使い方

docker-gcloud コマンドはDockerコンテナでgcloudコマンドを実行しています。
認証情報はホストの~/.config/gcloudを参照します。

Cloud Buildにジョブ登録してみます。

使い方

docker-gcloud コマンドはDockerコンテナでgcloudコマンドを実行しています。
認証情報はホストの~/.config/gcloudを参照します。

Cloud Buildにジョブ登録してみます。

# credentials.dbなどがある前提
> ls ~/.config/gcloud/
access_tokens.db   config_sentinel    credentials.db     legacy_credentials
active_config      configurations     gce                logs


> docker-gcloud --version
Google Cloud SDK 267.0.0
bq 2.0.49
core 2019.10.15
gsutil 4.44


> cat <<EOF > cloudbuild.yaml
steps:
- name: 'gcr.io/cloud-builders/git'
  entrypoint: 'bash'
  args: ['-c', 'echo "hoge"']
EOF


> docker-gcloud builds submit \
  --config=cloudbuild.yaml \
  --no-source
Created [https://cloudbuild.googleapis.com/v1/projects/<GCPのProjectID>/builds/16cab9fd-a4b3-4937-a7a3-7838516788d3].
Logs are available at [https://console.cloud.google.com/gcr/builds/16cab9fd-a4b3-4937-a7a3-7838516788d3?project=168605712006].
---------------------------------------------------- REMOTE BUILD OUTPUT ----------------------------------------------------
starting build "16cab9fd-a4b3-4937-a7a3-7838516788d3"

FETCHSOURCE
BUILD
Already have image (with digest): gcr.io/cloud-builders/git
hoge
PUSH
DONE
-----------------------------------------------------------------------------------------------------------------------------

ID                                    CREATE_TIME                DURATION  SOURCE  IMAGES  STATUS
16cab9fd-a4b3-4937-a7a3-7838516788d3  2019-10-20T02:23:44+00:00  3S        -       -       SUCCESS


> docker-gcloud builds log \
  16cab9fd-a4b3-4937-a7a3-7838516788d3
---------------------------------------------------- REMOTE BUILD OUTPUT ----------------------------------------------------
starting build "16cab9fd-a4b3-4937-a7a3-7838516788d3"

FETCHSOURCE
BUILD
Already have image (with digest): gcr.io/cloud-builders/git
hoge
PUSH
DONE
-----------------------------------------------------------------------------------------------------------------------------

カレントディレクトリのcloudbuild.yamlをちゃんとみてくれてますね。でけたー

環境設定

コマンドを作成

Google Cloud SDKのDockerイメージは公式から提供されているのでそれを利用します。

google/cloud-sdk – Docker Hub
https://hub.docker.com/r/google/cloud-sdk/

下記を参考にしてDockerコンテナ内でgcloudコマンドを実行できるようにします。

Dockerにホームディレクトリをマウントしちゃおう – Qiita
https://qiita.com/74th/items/a3a7d6826a67e8a61608

Dockerコンテナからホスト側カレントディレクトリにアクセス – Qiita
https://qiita.com/yoichiwo7/items/ce2ade791462b4f50cf3

ポイントは以下のとおりです。

  • -v $HOME/.config/gcloud:$HOME/.config/gcloud -e "HOME=$HOME"で認証情報をホストにあるものを参照
  • -v $PWD:$PWD -w $PWDでコマンド実行時のカレントディレクトリを指定
  • --entrypoint=gcloud$*で通常のgcloudコマンド実行と同じ挙動を実現

docker-gcloud

#!/bin/sh
docker run -it --rm \
  -v $HOME/.config/gcloud:$HOME/.config/gcloud \
  -v $PWD:$PWD \
  -e "HOME=$HOME" \
  -w $PWD \
  --entrypoint=gcloud \
  google/cloud-sdk:alpine \
  $*

作成したファイルのシンボリックリンクを/usr/local/binにはって実行できるようにします。/usr/local/bin$PATHに含まれている前提です。

google/cloud-sdk – Docker Hub
https://hub.docker.com/r/google/cloud-sdk/

Dockerにホームディレクトリをマウントしちゃおう – Qiita
https://qiita.com/74th/items/a3a7d6826a67e8a61608

Dockerコンテナからホスト側カレントディレクトリにアクセス – Qiita
https://qiita.com/yoichiwo7/items/ce2ade791462b4f50cf3

自作のコマンドを作成した – Qiita
https://qiita.com/yoshiken/items/2b8e6c24d6b95e65b625

> chmod +x docker-gcloud
> ln -s docker-gcloud /usr/local/bin/

これで最初にあげたようにdocker-gcloudコマンドが実行できるようになります。
gsutilコマンドもエントリーポイントを変えてやれば実現できます。

コマンド実行のカレントディレクトリがDockerコンテナで参照できるので、たいていのコマンド実行では問題にならないかなと。
docker-gcloud がコマンド打つのに長ったらしいのはエイリアスなんかでどうにでもなります。

まとめ

使えるかわかりませんが、とりあえずイメージしてたコマンドが出来上がりました。

参考

google/cloud-sdk – Docker Hub
https://hub.docker.com/r/google/cloud-sdk/

Dockerにホームディレクトリをマウントしちゃおう – Qiita
https://qiita.com/74th/items/a3a7d6826a67e8a61608

Dockerコンテナからホスト側カレントディレクトリにアクセス – Qiita
https://qiita.com/yoichiwo7/items/ce2ade791462b4f50cf3

自作のコマンドを作成した – Qiita
https://qiita.com/yoshiken/items/2b8e6c24d6b95e65b625

元記事はこちら

DockerコンテナからGoogle Cloud SDKのコマンドを簡単に実行できるコマンドをつくってみた

甲斐 甲

甲斐 甲

2018/7にJOIN。 最近の好みはサーバレスです。なんでもとりあえず試します。

cloudpack

cloudpackは、Amazon EC2やAmazon S3をはじめとするAWSの各種プロダクトを利用する際の、導入・設計から運用保守を含んだフルマネージドのサービスを提供し、バックアップや24時間365日の監視/障害対応、技術的な問い合わせに対するサポートなどを行っております。
AWS上のインフラ構築およびAWSを活用したシステム開発など、案件のご相談はcloudpack.jpよりご連絡ください。