LoginSignup
7
4

More than 3 years have passed since last update.

DockerでGAE/Goの開発環境をつくる

Last updated at Posted at 2019-06-21

はじめに

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/mainmain.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/mainapp.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

終わり

参考にした記事

7
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
4