├── .gitignore ├── Makefile ├── README.md ├── cmd └── api │ ├── Dockerfile │ └── main.go └── docker-compose.yml /.gitignore: -------------------------------------------------------------------------------- 1 | /api 2 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | default: 2 | @echo "=============building Local API=============" 3 | docker build -f cmd/api/Dockerfile -t api . 4 | 5 | up: default 6 | @echo "=============starting api locally=============" 7 | docker-compose up -d 8 | 9 | logs: 10 | docker-compose logs -f 11 | 12 | down: 13 | docker-compose down 14 | 15 | test: 16 | go test -v -cover ./... 17 | 18 | clean: down 19 | @echo "=============cleaning up=============" 20 | rm -f api 21 | docker system prune -f 22 | docker volume prune -f 23 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Go Docker Hot Reload Example 2 | 3 | This repository contains example code to run a hot reloading Go API within a Docker container. 4 | 5 | Find the corresponding blog post on my [blog](https://www.zachjohnsondev.com/posts/go-docker-hot-reload-example/). 6 | -------------------------------------------------------------------------------- /cmd/api/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM golang:1.10 2 | 3 | WORKDIR /go/src/github.com/Zach-Johnson/go-docker-hot-reload-example 4 | 5 | COPY . . 6 | 7 | RUN ["go", "get", "github.com/githubnemo/CompileDaemon"] 8 | 9 | ENTRYPOINT CompileDaemon -log-prefix=false -build="go build ./cmd/api/" -command="./api" 10 | -------------------------------------------------------------------------------- /cmd/api/main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "fmt" 5 | "log" 6 | "net/http" 7 | ) 8 | 9 | func handler(w http.ResponseWriter, r *http.Request) { 10 | fmt.Fprint(w, "Hello from the api!") 11 | } 12 | 13 | func main() { 14 | http.HandleFunc("/", handler) 15 | log.Println("listening on 5000") 16 | log.Fatal(http.ListenAndServe(":5000", nil)) 17 | } 18 | -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3.6' 2 | 3 | services: 4 | api: 5 | image: api:latest 6 | ports: 7 | - 5000:5000 8 | volumes: 9 | - ./:/go/src/github.com/Zach-Johnson/go-docker-hot-reload-example 10 | --------------------------------------------------------------------------------