Deployment 使用Docker容器部署Golang web app静态文件
我正在开发一个具有一些静态文件(配置和html模板)的小型web应用程序: 例如,代码中的模板是通过本地路径发现的(这是一种好做法吗?) Docker容器用于应用程序部署。正如您在Deployment 使用Docker容器部署Golang web app静态文件,deployment,go,docker,static-files,Deployment,Go,Docker,Static Files,我正在开发一个具有一些静态文件(配置和html模板)的小型web应用程序: 例如,代码中的模板是通过本地路径发现的(这是一种好做法吗?) Docker容器用于应用程序部署。正如您在Dockerfile中看到的,我必须复制/go/bin目录中的所有静态文件: FROM golang:latest ENV PORT=8000 ADD . /go/src/webserver/ RUN go install webserver RUN go get webserver # Copy static
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应用程序最合适的方法是什么
template.ParseGlob
,因此它将查找相对于当前工作目录的模板,您正在入口点中将其设置为/go/bin
我建议修改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
您还可以考虑使用部署和管理您的应用程序(请参阅部署GoWeb应用程序的演练)。
我将用一个环境变量替换代码中的静态模板路径——例如“代码> OS”Getenv(“TeMeTeMePATH”)<代码>,然后在DoCKFrfile中用<代码> Env/Poto/to/Studio/file >代码设置它。如果模板路径==”
,您可以选择退回到同一目录中的硬编码路径。如果您有多个选项可以传入,那么像这样的包可能很有用。此外,根据惯例:二进制文件通常应存储在/opt/
或/usr/local/bin
中,具体取决于您对文档的解释方式<代码>$HOME/bin
也可接受。模板/配置文件可以放在/opt/
或潜在的/etc/…
中-请记住权限可能是一个问题。我还没有测试Flynn,但您的Dockerfile工作得很好。非常感谢。
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
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