【问题标题】:Golang app deployment in docker containerdocker 容器中的 Golang 应用程序部署
【发布时间】:2023-03-15 07:40:02
【问题描述】:

我需要将 go restful 应用部署到 Docker 容器中。

我的项目结构如下

go_proj

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

我的 Dockerfile 应该是什么样子? 也许我应该从容器中下载库(mux)?

【问题讨论】:

    标签: docker go dockerfile


    【解决方案1】:

    我有一些使用 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 并希望将其公开给主机,请在 --name 之前将 -P 替换为 -p 并指定 @987654337 @:

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

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

    【讨论】:

      猜你喜欢
      • 2016-10-06
      • 2018-11-07
      • 2017-02-19
      • 1970-01-01
      • 2015-07-15
      • 2020-01-13
      • 2017-06-19
      • 1970-01-01
      • 2017-05-25
      相关资源
      最近更新 更多