【问题标题】:Docker workflow for automated builds on Github-Dockerhub在 Github-Dockerhub 上自动构建的 Docker 工作流程
【发布时间】:2017-08-26 14:55:50
【问题描述】:

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

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

如果我修改分支 docker 的 Dockerfile(生成 alpha 标记图像)并输入 git clone -b docker ... 构建是好的,但是在所有测试之后,当我想与从 docker 分支到 dev 分支的拉取请求合并时例如,需要在 dev 上进行另一个更新,以将 Dockerfile 中的 git clone 命令更改为指向正确的分支。与从开发到主的拉取请求相同,在这个项目上增加了难度,主分支受到保护,我不能直接推送到主......所以在从开发到主的拉取请求后,我无法修复Dockerfile 更改 Dockerfile 以更改 git clone 以再次指向 master。

有没有办法在从一个分支拉取请求到另一个分支之后,在不改变任何内容的情况下,在自动构建中使用不同标签的不同分支?谢谢。

【问题讨论】:

    标签: git github docker workflow dockerhub


    【解决方案1】:

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

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

    从上面;你应该 git clone 在你的 Dockerfile 中根本,因为你会做自动构建已经完成的事情。简单地做;

    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) 在自动构建的各个阶段运行自定义脚本。这允许您(例如)通过在“构建镜像”中构建您的项目,然后将生成的代码复制到本地目录,并从中构建最终镜像来制作“最小”镜像。

    编辑

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

    【讨论】:

    • 它没有用。我从 Dockerfile 中删除了git clone 并尝试了COPY . /some/existing/path/inside/the/container,在推送之后,自动构建在此之后的命令中失败,因为文件不存在。我的意思是,COPY 命令不会将我的项目复制到容器中。我也尝试了COPY .. /some/existing/path/inside/the/container,因为我的 Dockerfile 在项目的 /docker 目录中......但它也没有工作。还有其他想法吗?
    • 我的项目在 /docker 目录中有 dockerfile... 并且 COPY . /some/existing/path/inside/the/container 仅复制 /docker 文件夹的内容,其中只有 Dockerfile 和 README.md。我需要复制父目录及其所有目录(不管 /docker 是否被复制)。如何做到这一点?正如我在其他评论中所说。使用COPY .. /some/existing/path/inside/the/container 生成此错误Build failed: Forbidden path outside the build context: .. ()
    • @OscarAkaElvis 我添加了一些额外的信息和截图
    • 感谢您的帮助。 Dockercloud 似乎比 Dockerhub 更“专业”。似乎自动构建仅在测试版中是免费的,所以它现在可能可以工作。我看到我可以使用我的 Dockerhub 帐户(相同的用户/密码)登录,但是如果我在这里也使用正确的上下文设置设置自动构建会发生什么。有哪些偏好?我的意思是,在推送之后,我猜图像将被推送到 dockerhub 和 dockercloud。如果用户执行 docker pull,他将从哪里下载图像?来自 Dockerhub 还是 Dockercloud?我应该删除 Dockerhub 存储库还是至少自动构建?
    • 我测试了一下。它似乎首先建立在 Dockerhub 上,然后建立在 Dockercloud 上。如果你在 Dockercloud 上构建的同时拉取它,它会下载 Dockerhub 的镜像。在 Dockercloud 上构建完成后,它是从 Dockercloud 下载的,所以似乎 Dockercloud 有偏好。删除 Dockerhub 的存储库可能会更好。将查看删除后您是否仍然出现在搜索中。现在还有一个问题......你知道自述文件在构建后会自动设置,我在与 Dockerfile 相同的目录上准备了一个特殊的自述文件,现在由于上下文,Dockercloud 正在使用主自述文件。
    猜你喜欢
    • 1970-01-01
    • 2021-05-25
    • 2020-03-05
    • 1970-01-01
    • 2019-03-22
    • 1970-01-01
    • 2016-08-19
    • 2020-07-08
    • 2022-06-30
    相关资源
    最近更新 更多