我的工作,有一些静态文件(CONFIGS和HTML模板)一个小型Web应用程序的静态文件:部署Golang 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"))
}
泊坞容器用于应用程序部署。正如你可以在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应用程序的最合适的方法?
我会用一个环境变量替换代码中的静态模板路径 - 例如'os.Getenv(“TEMPLATE_PATH”),然后在你的Dockerfile中用'ENV/path/to/template/file'来设置它。如果“TEMPLATE_PATH ==”“',您可以选择回退到同一目录中的硬编码路径。像https://github.com/kelseyhightower/envconfig这样的软件包可以很有用,如果你有多个选项可以通过。 – elithrar
另外,根据约定:二进制文件通常应该*存储在'/ opt /'或'/ opt/usr/local/bin',具体取决于你如何解释文档。 '$ HOME/bin'也是可以接受的。 templates/config文件可以共同位于'/ opt /'或潜在地'/ etc//...' - 记住权限可能是一个问题。 –
elithrar