🐳

gcloudコマンドを実行するためだけのdocker-compose

2023/12/05に公開

はじめに

「ローカルを汚さずに××」の話に毎回出てくる docker ですが、今回は 「ローカルを汚さずにGoogle Cloud SDK環境を作る」 という何番煎じか分からない内容を自分用のメモとして残しておこうと思います。

docker-compose.yml

早速ですが、 docker-compose.yml は以下の記述になります。

services:
  sdk:
    image: google/cloud-sdk
    platform: linux/x86_64
    working_dir: app
    tty: true
    volumes:
      - ./:/app
      - ./gcloud:/root/.config/gcloud

platform

今回使用している端末がM2のMacであるため、アーキテクチャを指定するために platform を指定しています。

working_dir

カレントディレクトリを app にマウントしているので、作業ディレクトリもそちらに設定しています。

volumes

次回以降の起動時も認証情報を保持できるように、認証情報が格納されているディレクトリ(/root/.config/gcloud) をマウントしておきます。

認証設定

初回起動時には認証設定が必要です。まずはコンテナを立ち上げ

docker-compose up -d

auth login コマンドで認証します。

docker-compose run sdk gcloud auth login

URLが表示されてAPIトークンの入力待機状態になるので、ブラウザでそのURLにアクセスして認証を行い、取得したAPIトークンを待機中のコンソールに貼り付けたら認証完了です。

コマンド実行

認証が完了したら、以降は以下の構文で gcloud コマンドが実行できます。

docker-compose run sdk gcloud config list

エイリアスの設定

毎回 docker-compose run sdk gcloud ... を入力するのは長いので、エイリアスを設定して省略しても良いと思います。

alias gcloud='docker-compose run sdk gcloud'

今回は docker-compose で環境を構築している関係上 ./bashrc 等にエイリアスを登録しても該当の docker-compose が起動しているディレクトリでしか使えません。
それでは気持ちが悪いので都度エイリアスを設定したいところですが、今回はエイリアスを設定するこのスクリプト自体が長いので、開発を始める度にいちいち入力するのは面倒です。

そこで以下のような内容の alias.sh のようなファイルを作成し、

#!/bin/sh
alias gcloud='docker-compose run sdk gcloud'

こちらを source で読み込む事で、シェルスクリプトに書かれているエイリアスをカレントシェルに読み込む事ができます。

source ./alias.sh

開発準備を簡単にするシェルスクリプト

僕は諸々の準備手順をまとめて、以下のコマンドを ready.sh としてプロジェクトのルートに置いておき、作業開始前に実行しています。

#!/bin/sh
alias gcloud='docker-compose run sdk gcloud'
docker-compose up -d
sleep 1
gcloud config list
source ./ready.sh

終わりに

内容としてはとても簡単なのですが、 docker-compose にしばらく触れていなかったせいで色々と忘れていたので、備忘録として残しておきます。
同じ事で調べ物をしている人が、1秒でも早くコーディングに辿り着くお手伝いができたなら幸いです。

おまけ

諸事情あって Docker Desktop が使えなかったので、 Lima を導入しました。
インストール自体は brew で簡単に行えます。

brew install lima docker docker-compose

テンプレートを使うことによってセットアップも簡単に行えるのですが、M2搭載のMacはアーキテクチャの違いによってそのテンプレートでは動かないようで…
以下の記事の通りにyaml を書いてインスタンスを起動させました。

https://qiita.com/shun_so/items/6435dca3bf756b324154

こちらも備忘録として残しておきます。

Discussion