I'm working on a small web application that has some static files (configs and html templates):
├── Dockerfile
├── manifest.json
├── session
│ ├── config.go
│ ├── handlers.go
│ └── restapi_client.go
├── templates
│ ├── header.tmpl
│ └── index.tmpl
└── webserver.go
For instance, templates in the code are discovered with a local path (is it a good practice?):
func init() {
templates = template.Must(template.ParseGlob("templates/*.tmpl"))
}
Dockerfile/go/bin
FROM golang:latest
ENV PORT=8000
ADD . /go/src/webserver/
RUN go install webserver
RUN go get webserver
# Copy static files
RUN cp -r /go/src/webserver/templates /go/bin/templates
RUN cp -r /go/src/webserver/manifest.json /go/bin/manifest.json
EXPOSE $PORT
ENTRYPOINT cd /go/bin && PORT=$PORT REDIRECT=mailtest-1.dev.search.km /go/bin/webserver -manifest=manifest.json
I think this workaround should be considered as incorrect since it violates standard Linux conventions (separate storing of the executable files and various data files). If anyone uses Docker for Golang web application deployment too, please share your experience:
- How do you store static content and how do you discover it in your code?
- What is the most proper method of deploying web application with a Docker containers?