为了账号安全,请及时绑定邮箱和手机立即绑定

使用 Docker 容器部署 Golang Web 应用静态文件

使用 Docker 容器部署 Golang Web 应用静态文件

Go
至尊宝的传说 2021-10-04 16:07:14
我正在开发一个包含一些静态文件(配置和 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:latestENV PORT=8000ADD . /go/src/webserver/RUN go install webserverRUN go get webserver# Copy static filesRUN cp -r /go/src/webserver/templates /go/bin/templatesRUN cp -r /go/src/webserver/manifest.json /go/bin/manifest.jsonEXPOSE $PORTENTRYPOINT cd /go/bin && PORT=$PORT REDIRECT=mailtest-1.dev.search.km /go/bin/webserver -manifest=manifest.json我认为这种解决方法应该被认为是不正确的,因为它违反了标准的 Linux 约定(可执行文件和各种数据文件的单独存储)。如果有人也使用 Docker 进行 Golang Web 应用程序部署,请分享您的经验:您如何存储静态内容以及如何在代码中发现它?使用 Docker 容器部署 Web 应用程序的最正确方法是什么?
查看完整描述

1 回答

?
PIPIONE

TA贡献1829条经验 获得超9个赞

由于您将相对路径名传递给template.ParseGlob,它将查找相对于当前工作目录的模板,您/go/bin在ENTRYPOINT.


我建议修改您Dockerfile使用WORKDIR指令将工作目录设置为/go/src/webserver,这将避免需要将文件复制到/go/bin,例如:


FROM golang:latest

ADD . /go/src/webserver

WORKDIR /go/src/webserver

RUN go get

RUN go install

ENV PORT=8000

ENV REDIRECT=mailtest-1.dev.search.km

EXPOSE 8000

ENTRYPOINT /go/bin/webserver -manifest=manifest.json

您还可以考虑使用Flynn来部署和管理您的应用程序(有关部署 Go Web 应用程序的演练,请参见此处)。


查看完整回答
反对 回复 2021-10-04
  • 1 回答
  • 0 关注
  • 274 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信