なぜ Docker
詳しい理由は
Cloud Functionsで消耗したくない人のために、開発環境のベストプラクティスをまとめていったらDockerに行き着いた話
こちらの記事が参考になりそうです。
軽くまとめると
- ローカル環境を汚さなくて良い
- コマンド一発で同じ環境ができるので楽
- Google Cloud SDK の認証情報をコンテナに閉じ込められる => 複数アカウント、プロジェクトの管理がしやすい
あたりの理由になるかなと思います。
ここで Node.js で説明されている部分を Go に置き換えたのがこの記事、くらいに思っていただければささっと読めるかもしれません。
docker-compose で書く
docker-compose で書くのが好きなので、中身を置いておきます。
version: "3.8"
services:
gcloud:
image: tktcorporation/google-cloud-sdk-golang:291.0-go1.13
working_dir: /go/src/app
volumes:
- .:/go/src/app
この記述では、下記の構成のコンテナが作成できます。
Package | Version |
---|---|
Golang | 1.13 |
Google Cloud SDK | 291.0 |
image の タグは 291.0-go1.11
, 291.0-go1.12
, 291.0-go1.13
に対応しているので、 別のバージョンの Golang を動かしたい場合はタグを切り替えてください。(2020/05 時点)
そもそも Golang ってどう使うの?モジュールとかどうやって管理するの?みたいな話はこちらをどうぞ
-> Golang の modules 管理
Google Cloud SDK の使用準備
$ docker-compose run gcloud /bin/bash
$ gcloud auth login
...
Go to the following link in your browser:
https://accounts.google.com/o/oauth2/auth?response_type=code&client_id=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
https://accounts.google.com/o/oauth2/auth?response_type=code&client_id=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
のリンクに飛んで、
Google アカウントでログインして、
そこで表示されるコードをコピーして、
コンテナにそのコードを入力。
とすると、ログインが完了する。
あとは、プロジェクトの設定をしたり、好きに作業する。
Dockerfile を書く場合
docker-compose で書く で使用している image(tktcorporation/google-cloud-sdk-golang:291.0-go1.12) の中で書いている Dockerfile も置いておきます。
各パッケージのバージョンを変更したい時だったりに使えるかと思います。
FROM google/cloud-sdk:291.0.0
ENV GOPATH /go
ENV PATH $GOPATH/bin:/usr/local/bin:$PATH
ENV GOLANG_VERSION 1.13.1
RUN curl -Lso go.tar.gz "https://dl.google.com/go/go${GOLANG_VERSION}.linux-amd64.tar.gz" \
&& tar -C /usr/local -xzf go.tar.gz \
&& rm go.tar.gz
ENV PATH /usr/local/go/bin:$PATH