こんにちは、@akifumifukayaです。
GAE+GOでサーバーサイドを開発しており、Docker対応したのでメモを残しておきます。
ベースイメージの選択
はじめに今回作成するイメージのベースイメージを決めます。
以下に、調べたものを残しておきます。
ベースイメージ候補
1. debian
debianイメージをベースとして、一から環境構築を行う方法です。
まっさらなdebian環境となるので、様々なカスタマイズが行えます。
その代わり、必要な設定は全部書く必要があります。
例)Dockerfile
FROM debian:jessie
2. golang
Golangが入っている環境です。
任意のバージョンの入れることができます。
例)Dockerfile
FROM golang:1.8
3. mercari
Mercari, Intが作成・運用しているイメージです。
複数バージョン対応しているので、使い勝手が良さそう。
Githubでも公開されています。
https://github.com/mercari/docker-appengine-go
4. Cloud SDK
Cloud SDKが入ったイメージです。
GAEで開発する行う場合、gcloudコマンドが必要となるためGoogle Cloud SDKは必要となります。
例)Dockerfile
FROM google/cloud-sdk:alpine
今回は、google/cloud-sdk:alpineをベースイメージとして、イメージを作成しようと思います。
構築
Golangのインストール
google/cloud-sdk:alpine
には、Golangが入ってなかったので、インストールします。
https://golang.org/dl/ からGolangをダウンロードすることができます。
今回は、Golang 1.8.3をインストールすることにしました。
ENV GO_VERSION 1.8.3
RUN curl -Lso go.tar.gz "https://dl.google.com/go/go${GO_VERSION}.linux-amd64.tar.gz" \
&& tar -C /usr/local -xzf go.tar.gz \
&& rm go.tar.gz
インストール後、goのパスも忘れずに通しておきましょう。
ENV PATH /usr/local/go/bin:$PATH
depのインストール
※こちらはdepを使用している方のみとなります。
golangのインストールでgoパスを通したのでgo get
でインストールできます。
RUN go get -u github.com/golang/dep/cmd/dep
GAE SDKのインストール
GAE for GoのSDKをインストールします。
RUN gcloud components install app-engine-go
⚠️注意点⚠️
/google-cloud-sdk/platform/google_appengine/appcfg.py
の実行権限がなく、パスも通っていなかったので注意してください。
appcfg.py
を実行したい方は対応が必要です。
自分の場合は、以下のように対応しました。
RUN chmod 755 /google-cloud-sdk/platform/google_appengine/appcfg.py
ENV PATH /google-cloud-sdk/platform/google_appengine:$PATH
Dockerfile
以下が、最終的なDockerfile
です。
FROM google/cloud-sdk:alpine
ENV GOPATH /go
ENV PATH $GOPATH/bin:/usr/local/bin:$PATH
# Install Go
ENV GO_VERSION 1.8.3
RUN curl -Lso go.tar.gz "https://dl.google.com/go/go${GO_VERSION}.linux-amd64.tar.gz" \
&& tar -C /usr/local -xzf go.tar.gz \
&& rm go.tar.gz
ENV PATH /usr/local/go/bin:$PATH
# Install dep
RUN go get -u github.com/golang/dep/cmd/dep
# Install GAE for Go SDK
RUN gcloud components install app-engine-go
RUN chmod 755 /google-cloud-sdk/platform/google_appengine/appcfg.py
ENV PATH /google-cloud-sdk/platform/google_appengine:$PATH
GAE/SE+GoのDocker環境構築の記事があまりなかったので、参考になればと思います。
参考
http://takaya030.hatenablog.com/entry/2017/07/08/181136
https://qiita.com/wasnot/items/b8691bb4940e6f4a9c24
https://medium.com/@timakin/gae-goをcircleci2-0経由でdeploy-5af054c7d4af