takaya030の備忘録

PHP、Laravel、Docker などの話がメインです

docker-compose を使って Google App Engine for Go の開発環境を作る

検証環境

Windows10 Home Edition
VirtualBox 5.1.22
Docker version 17.05.0-ce, build 89658be
docker-compose version 1.6.2, build 4d72027

ディレクトリ構成

+---gaego
|   |   docker-compose.yml
|   |   
|   +---data
|   |       Dockerfile
|   |       
|   +---sdk
|           Dockerfile
|            
+---logs
|    
+---www
    |       
    +---app
            app.yaml
            hello.go

各種設定ファイル

gaego/docker-compose.yml

version: "2"
services:
  data:
    build: ./data
    volumes:
      - ../:/data
  sdk:
    build: ./sdk
    volumes_from:
      - data
    ports:
      - "8080:8080"
      - "8000:8000"

gaego/data/Dockerfile

FROM busybox
LABEL maintainer "takaya030"

RUN mkdir -p /data
VOLUME ["/data"]
CMD ["true"]

gaego/sdk/Dockerfile

FROM google/cloud-sdk:alpine
LABEL maintainer "takaya030"

# install go1.6
RUN curl -Lso go1.6.4.linux-amd64.tar.gz https://storage.googleapis.com/golang/go1.6.4.linux-amd64.tar.gz \
	&& tar -C /usr/local -xzf go1.6.4.linux-amd64.tar.gz \
	&& rm go1.6.4.linux-amd64.tar.gz

# install GAE for Go SDK
RUN gcloud components install app-engine-go

# install git
RUN apk add --update --no-cache \
		git

# create docker user
RUN adduser -S -u 1000 -g 50 docker \
	&& echo 'docker:tcuser' | chpasswd

RUN mkdir -p /data/www
VOLUME ["/data"]
WORKDIR /data/www
ENV GOPATH /data/www
ENV PATH $PATH:/usr/local/go/bin:/data/www/bin

USER 1000

CMD ["dev_appserver.py","--host","0.0.0.0","--admin_host","0.0.0.0","./app"]

gaego/www/app/app.yaml

runtime: go
api_version: go1

handlers:
- url: /.*
  script: _go_app

gaego/www/app/hello.go

package hello

import (
    "fmt"
    "net/http"
)

func init() {
    http.HandleFunc("/", handler)
}

func handler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprint(w, "Hello, world!")
}

イメージのビルド

gaego ディレクトリに移動後、以下のコマンドでイメージをビルドします。

$ docker-compose build

動作確認

以下のコマンドで開発用サーバーが起動します。

$ docker-compose up -d

web ブラウザで http://192.168.99.100:8080 にアクセスして "Hello, world!" の文字が表示されれば成功です。

http://192.168.99.100:8000 にアクセスすると管理ページが表示されます。
f:id:takaya030:20170708180943p:plain