はじめに
docker version
ターミナル
$ docker version
Client: Docker Engine - Community
Version: 18.09.2
API version: 1.39
Go version: go1.10.8
Git commit: 6247962
Built: Sun Feb 10 04:12:39 2019
OS/Arch: darwin/amd64
Experimental: false
Server: Docker Engine - Community
Engine:
Version: 18.09.2
API version: 1.39 (minimum version 1.12)
Go version: go1.10.6
Git commit: 6247962
Built: Sun Feb 10 04:13:06 2019
OS/Arch: linux/amd64
Experimental: false
開発環境を構築することが目的なので、それに付随する説明等は省いております。
作業開始
① 任意の作業ディレクトリにフォルダを作成して移動
ターミナル
mkdir xxxxxxxxx
cd xxxxxxxxx
② Dockerfileを作成
※ 最後の行の WORKDIR /go/src/xxxxxxxxx
xxxxxxxxx
は最初に作成したフォルダ名
Dockerfile
FROM golang:1.11-stretch
ENV GOPATH=/go \
PATH=/go/bin:/usr/local/go/bin:/google-cloud-sdk/bin:/google-cloud-sdk/platform/google_appengine:$PATH
ENV CLOUD_SDK_VERSION 241.0.0
RUN apt-get -qqy update && apt-get install -qqy \
curl \
gcc \
python-dev \
python-setuptools \
apt-transport-https \
lsb-release \
openssh-client \
git \
&& easy_install -U pip && \
pip install -U crcmod && \
export CLOUD_SDK_REPO="cloud-sdk-$(lsb_release -c -s)" && \
echo "deb https://packages.cloud.google.com/apt $CLOUD_SDK_REPO main" > /etc/apt/sources.list.d/google-cloud-sdk.list && \
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add - && \
apt-get update && \
apt-get install -y google-cloud-sdk=${CLOUD_SDK_VERSION}-0 \
google-cloud-sdk-app-engine-python \
google-cloud-sdk-app-engine-java \
google-cloud-sdk-app-engine-go \
google-cloud-sdk-datalab \
google-cloud-sdk-datastore-emulator \
google-cloud-sdk-pubsub-emulator \
google-cloud-sdk-bigtable-emulator \
google-cloud-sdk-cbt \
kubectl && \
gcloud config set core/disable_usage_reporting true && \
gcloud config set component_manager/disable_update_check true && \
gcloud config set metrics/environment github_docker_image
VOLUME ["/root/.config"]
WORKDIR /go/src/xxxxxxxxx
③ docker-compose.ymlを作成
※ container_name: xxxxxxxxx
と ./:/go/src/xxxxxxxxx
xxxxxxxxx
は最初に作成したフォルダ名
docker-compose.yml
version: '3'
services:
app:
build: .
container_name: xxxxxxxxx
volumes:
- ./:/go/src/xxxxxxxxx
ports:
- "8080:8080"
environment:
GO111MODULE: "on"
④ backend/main
フォルダを作成
⑤ backend/main
にmain.go
を作成
main.go
package main
import (
"fmt"
)
func main() {
http.HandleFunc("/", handler)
http.ListenAndServe(":8080", nil)
}
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello, World")
}
⑥ backend/main
に app.yaml
を作成
app.yaml
runtime: go111
⑦ コンテナを作成してコンテナ内に入る
ターミナル
docker-compose build
docker-compose run -p 8080:8080 app bash
⑧ コンテナ内で各コマンドの確認
コンテナ内bash
go version
gcloud version
⑨ goモジュール初期化
コンテナ内bash
go mod init
※ go.mod
go.sum
が生成される
⑩ goファイルのディレクトリに移動
コンテナ内bash
cd backend/main/
⑪ go localサーバー起動
コンテナ内bash
go run main.go
⑫ Google Chromeで localhost:8080
ブラウザにHellow, Worldが表示される
⑬ gcloudログイン
コンテナ内bash
gcloud auth login
※URLがでてくるので、ブラウザに貼り付けて認証
コードがでてくるのでbashに貼り付けて認証完了
⑭ GCPプロジェクトのセット
コンテナ内bash
gcloud config set project (projectId)
⑮ AppEngineにデプロイ
コンテナ内bash
gcloud app deploy
⑯ コンテナから出る
コンテナ内bash
exit
⑰ 既存のコンテナ名を確認してコンテナ内に再び入る
ターミナル
docker ps -a
※ NAMESの列がコンテナ名
docker start (コンテナ名)
docker exec -it (コンテナ名) bash
終わり
参考にした記事