我需要将restful app部署到Docker容器中。
我的项目具有以下结构
go_proj
|- bin |- src | | |- com.example | | | |- web_service.go | | | |- github.com.gorilla.mux | | | - ... |- Dockerfile
我的Dockerfile应该如何? 也许我应该从容器中下载库(mux)?
答案 0 :(得分:0)
我在使用Docker部署Go应用程序方面有一些经验。
这就是我的项目在${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
创建一个供应商目录,我将所有这些软件包放在一起并管理它们的版本。
之后我的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
:
docker build -t serverproject .
并将其部署到容器中:
docker run -P --rm --name myserver1 serverproject
如果要将参数传递给服务器,可以执行以下操作:
docker run -P --rm --name myserver1 serverproject --arg1 --arg2=bla
注意如果您未在Dockerfile中指定PORT
并希望将其公开给主机,请在-P
之前将-p
替换为--name
{1}}并指定<host-port>:<container-port>
:
docker run --rm -p 8080:8080 ...
这实际上会从您的主机向前移植到容器。