在Docker容器中部署Golang应用程序

我需要将安静的应用程序部署到Docker容器中。

我的项目有以下结构

go_proj

|- bin |- src | | |- com.example | | | |- web_service.go | | | |- github.com.gorilla.mux | | | - ... |- Dockerfile 

我的Dockerfile应该如何? 也许我应该从容器中下载库(mux)?

我有一些使用Docker部署Go应用程序的经验。

TL; DR

这就是我的项目在${GOPATH}/src/github.com/githubhandle/project

 main.go vendor.conf vendor/ github.com/gorilla/mux github.com/sirupsen/logrus github.com/bshuster-repo/logrus-logstash-hook ... Dockerfile 

而Dockerfile看起来像这样:

 FROM golang:1.8 WORKDIR /go/src/app COPY . . RUN go-wrapper download RUN go-wrapper install EXPOSE [8080] ENTRYPOINT ["go-wrapper", "run", "main.go"] 

很多

长答案

一般来说,我喜欢把我的Dockerfile放在服务器目录中:

 go/ src/ github.com/ mygithub/ serverproject/ main.go Dockerfile 

如果我在我的项目中使用非标准软件包(例如(gorilla / mux)),我可能会使用vndr来创build一个供应商目录,在这里我放置所有这些软件包并pipe理它们的版本。

之后,我的Dockerfile可能会是这样的:

 FROM golang:1.8 WORKDIR /go/src/app COPY . . RUN go-wrapper download RUN go-wrapper install ENTRYPOINT ["go-wrapper", "run", "main.go"] 

注意您可能需要自动公开端口号。 例如,添加这一行会将容器内的端口8080暴露给主机。

 PORT 8080 

剩下要做的就是在go/src/github.com/mygithub/serverproject构build镜像:

 docker build -t serverproject . 

并将其部署到一个容器中:

 docker run -P --rm --name myserver1 serverproject 

如果你想传递参数给服务器,你可以这样做:

 docker run -P --rm --name myserver1 serverproject --arg1 --arg2=bla 

请注意 ,如果您没有在Dockerfile中指定PORT并希望将其公开给主机,请将-Preplace为-p前的-p ,并指定<host-port>:<container-port>

 docker run --rm -p 8080:8080 ... 

这将实际上从您的主机端口转移到容器。