我正在开发一个包含一些静态文件(配置和 html 模板)的小型 Web 应用程序:


├── Dockerfile

├── manifest.json

├── session

│   ├── config.go

│   ├── handlers.go

│   └── restapi_client.go

├── templates

│   ├── header.tmpl

│   └── index.tmpl

└── webserver.go

例如,代码中的模板是通过本地路径发现的(这是一个好习惯吗?):


func init() {

    templates = template.Must(template.ParseGlob("templates/*.tmpl"))

}

Docker 容器用于应用程序部署。正如您在 中看到的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

我认为这种解决方法应该被认为是不正确的,因为它违反了标准的 Linux 约定(可执行文件和各种数据文件的单独存储)。如果有人也使用 Docker 进行 Golang Web 应用程序部署,请分享您的经验:


您如何存储静态内容以及如何在代码中发现它?

使用 Docker 容器部署 Web 应用程序的最正确方法是什么?