Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

はじめに

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

終わり

参考にした記事

https://github.com/gcpug/docker-appengine-go

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away