Docker 在 Github-Dockerhub 上自动构建的工作流程

Docker workflow for automated builds on Github-Dockerhub

我已经设置了一个包含 3 个分支(master、dev 和 docker)的 github 存储库。我已经成功设置并链接了 dockerhub 上的自动构建。每次在 Github 上完成推送时,都会在 Dockerhub 上构建一个带有不同标签的镜像(master 的最新版本,dev 的 beta 版本和 docker 的 alpha 版本)。这工作正常。现在的问题...

在 Dockerfile 上,有一个 git clone 命令来检索项目。问题是 this 总是指向 master 。因此,例如,如果我将某些内容推送到 docker 分支(它使用 alpha 标签构建图像),该图像上的项目代码是主代码,而不是分支 docker 的代码,这是所需的案例.

如果我修改分支 docker 的 Dockerfile(生成带有 alpha 标记的图像)并放入 git clone -b docker ... 构建没问题,但在所有测试之后,当我想与例如,从 docker 分支向 dev 分支拉取请求,dev 需要另一个更新来更改 Dockerfile 中的 git clone 命令以指向正确的分支。与从 dev 到 master 的拉取请求一样,在这个项目上 master 分支受到保护,我不能直接推送到 master 的额外困难......所以在从 dev 到 master 的拉取请求之后我无法修复Dockerfile 更改 Dockerfile 以更改 git clone 以再次指向 master.

有没有一种方法可以让不同的分支在自动化构建中具有不同的标签,而无需在从一个分支请求到另一个分支后进行任何更改?谢谢。

使用自动构建时,会发生这种情况;

  • Docker Hub(或 Docker Cloud,具有一些更高级的功能)检查触发构建的 git 提交
  • 它会构建您在自动构建中配置为构建的Docker文件

从上面;你应该 git clone 在你的 Docker 文件 ,因为你会做已经由自动构建。简单地做;

FROM some-base-image

# Copy your project's source into the image
COPY . /my-src
RUN do-something-with-the-source

Docker Cloud 具有高级功能,允许您使用 build phase hooks (documentation) 在自动构建的各个阶段 运行 自定义脚本。这允许您(例如)通过在 "build image" 中构建项目来制作 "minimal" 图像,然后将生成的代码复制到本地目录,并从中构建最终图像。

编辑

Docker Cloud 上的自动构建选项比 Docker Hub 上的自动构建具有更多功能。例如要构建的Docker文件,构建上下文可以单独设置。这允许您在子目录中有一个 Docker 文件,但使用该子目录之外的文件作为构建上下文。为此,将 Docker 文件位置设置为(例如)/docker/Dockerfile,并将构建上下文设置为 /