DockerでGoの開発をしていますか? ファイル変更の度に、docker-compose restart とかめんどくさいですよね。 そんな時は、ファイル変更を検知して、コマンドを実行してくれる realize をおすすめします。

main.go

package main

import (
	"fmt"
	"flag"
	"net/http"
)

var arg1 string

func handler(w http.ResponseWriter, r *http.Request) {
  fmt.Fprintf(w, "Hello, %s", arg1)
}

func main() {
	flag.StringVar(&arg1, "arg1", "", "arg1")
	flag.Parse()

	http.HandleFunc("/", handler)
  http.ListenAndServe(":8080", nil)
}

Dockerfile

FROM golang:1.9
WORKDIR /work
RUN go get github.com/tockins/realize
CMD ["realize", "start", "--no-config", "--run", "'--arg1=hoge'"]

実行してみる

$ docker build -t example/realize .
$ docker run -v /path/to/work:/work example/realize
app_1  | [02:59:35][WORK] : Watching 1 file/s 1 folder/s
app_1  | [02:59:35][WORK] : Installing...
app_1  | [02:59:36][WORK] : Installed in 0.627 s
app_1  | [02:59:36][WORK] : Running..
app_1  | [02:59:36][WORK] : Started in 0.001 s

確認

$ curl http://127.0.0.1:8080
Hello, hoge