【问题标题】:How write dockerfile to properly pull code from my github如何编写 dockerfile 以从我的 github 中正确提取代码
【发布时间】:2018-09-03 19:07:31
【问题描述】:

我正在使用 Go 构建一个网站,该网站通过 docker 托管在我的家庭服务器上。

我正在尝试做的事情: 我在本地对我的网站/服务器进行更改,然后将它们推送到 github。我想编写一个 dockerfile,以便它从我的 github 中提取这些数据,构建图像,然后我的 docker-compose 文件将使用它来创建容器。

不幸的是,我所有的尝试都有些接近但都是错误的。

FROM golang:1.8-onbuild
MAINTAINER <my info>
RUN go get <my github url>
ENV webserver_path /website/
ENV PATH $PATH: webserver_path
COPY website/ .
RUN go build .
ENTRYPOINT ./website
EXPOSE <ports>

这个文件是我通过谷歌搜索找到的一些小指南的组合,但没有一个能完全提供我需要的信息,而且它从来没有完全奏效。

我希望有良好 docker 经验的人可以将 Dockerfile 放在一起供我用作指南,这样我就可以找到我做错了什么?我认为我正在寻找的内容只需几行就可以完成,而我的内容比需要的要冗长一些。

下面有额外但可能不必要的信息

项目布局:

数据:是我的 go 文件所在的位置旁注:这在尝试构建映像时给我带来了错误,这与不在环境路径中有关。不确定这是否有帮助

静态:CSS、JS、图片

TPL:转到模板文件

Main.go:启动服务器/网站

【问题讨论】:

  • 但是您有两种基本方法可用:1) 让您的 Dockerfile 克隆您的 git repo,就像您从 docker 中一样(即git clone ...)。 2) 在你的 git repo 中有一个构建脚本,它为你构建 docker 镜像,并将其推送到你的 Docker repo(即 Dockerhub)。
  • 您在构建 Docker 映像时遇到了哪些具体问题?你得到什么错误?或者您对生成的图像有什么问题?

标签: docker go dockerfile


【解决方案1】:

有几种策略:

  • 使用预构建应用。使用构建您的应用程序 go build 根据目标系统架构和操作系统的命令(例如使用 GOOS 和 GOARCH 系统变量)然后使用 COPY docker 命令将此构建的文件(带有资产和模板)移动到您的 WORKDIR 并最终通过 CMD 或 ENTRYPOINT 运行它(最后更可取)。此示例的 Dockerfile 将如下所示:

从头开始

ENV PORT 8000 暴露 $PORT

复制出现/CMD ["/advent"]

  • 由 dockerfile 构建。典型的 Dockerfile:
# Start from a Debian image with the latest version of Go installed
# and a workspace (GOPATH) configured at /go.
FROM golang

# Copy the local package files to the container's workspace.
ADD . /go/src/github.com/golang/example/outyet

# Build the outyet command inside the container.
# (You may fetch or manage dependencies here,
# either manually or with a tool like "godep".)
RUN go install github.com/golang/example/outyet

# Run the outyet command by default when the container starts.
ENTRYPOINT /go/bin/outyet

# Document that the service listens on port 8080.
EXPOSE 8080
  • 使用 GitHub。构建您的应用并拉取到 dockerhub 作为准备使用的映像。

【讨论】:

  • 感谢您的回复。因为这个项目是一个正在进行的工作,我想我想要第二种方法,因为会经常进行更改。如果整个项目都包含在该“网站”目录中,此方法是否有效?运行所需的所有代码都将从我的 GitHub 中提取。
【解决方案2】:

Github 支持Webhooks,当你推送到 git repo 时,它可以用来自动做各种事情。既然你已经在你的 home box 上运行了一个 web 服务器,为什么不让 Github 在它收到master 上的提交时向它发送一个 POST 请求,并让你的 home box 重新下载 git repo 并重新启动 web服务?

【讨论】:

  • 虽然你被否决了,而且这与我的问题无关,但这实际上是一个非常有用的建议,我一定会看看。谢谢。
  • 实际上我最终只是按照您的建议进行了操作,这比我想的要容易得多。感谢您为我指明正确的方向。
【解决方案3】:

我能够通过 docker hub 创建一个自动构建,并将其用于我的 dockerfile 来解决我的问题:

FROM golang-onbuild
EXPOSE <ports>

这不是我问题的正确答案,但它是一种有效的解决方法。自动构建以我希望 dockerfile 的方式连接到我的 github 存储库。

【讨论】:

    猜你喜欢
    • 2017-07-27
    • 1970-01-01
    • 2021-07-15
    • 2012-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多