Docker容器

时间:2017-08-29 21:23:12

标签: docker go dockerfile

我需要将restful app部署到Docker容器中。

我的项目具有以下结构

go_proj

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

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

1 个答案:

答案 0 :(得分:0)

我在使用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创建一个供应商目录,我将所有这些软件包放在一起并管理它们的版本。

之后我的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 ...

这实际上会从您的主机向前移植到容器。