【发布时间】:2019-04-12 01:23:15
【问题描述】:
我想在 GitHub 上创建一个 dockerfiles 存储库,以集中我迄今为止创建的所有自定义 Dockerfiles。我还想独立地在 Docker Hub 上自动构建每个映像。
GitHub上有很多这样的仓库:
(我不会在这里谈论星号最多的存储库:https://github.com/jessfraz/dockerfiles,因为您可以看到 on Docker Hub,这些是不是自动构建)
想要的dockerfiles 存储库结构
我希望我的dockerfiles GitHub 存储库具有以下结构(分支master),基于我上面提到的 GitHub 存储库:
dockerfiles (GitHub repo)
|- docker-image-1
|- Dockerfile
|- docker-image-2
|- Dockerfile
|- ...
Docker Hub 构建自动化
配置
在 Docker Hub 上,我可以创建 2 个公共自动构建:docker-image-1 和 docker-image-2,它们都引用了我的 dockerfiles GitHub 存储库,但使用不同的构建设置(实际上,只有Dockerfile Location 不同):
- 对于
docker-image-1:- 类型:分支
- 姓名:主人
- Dockerfile 位置:/docker-image-1/
- Docker 标记名称:最新
- 对于
docker-image-2:- 类型:分支
- 姓名:主人
- Dockerfile 位置:/docker-image-2/
- Docker 标记名称:最新
缺点
使用此配置,如果在 master 分支上进行推送,所有图像 将被重建(即使推送和 Dockerfile 位置只涉及 1 个 Dockerfile /em>s 不同)。我检查过,它似乎是为vimagick's repository 配置的。但我不认为这是正确的方式(如果我错了,请告诉我)。
当然,在每个自动构建的构建设置中,我可以禁用选项“激活时,构建将在推送时自动发生”以避免这种情况,但我'我必须根据Dockerfile 我更新的内容手动触发每个构建(不是自动的)。
提高自动化程度?
我看到的提高自动化程度的解决方案是:
- 在其自己的 GitHub 存储库中分隔每个
Dockerfile。不再有dockerfiles存储库,因此每个存储库都有自己的工作流程 - 使用单个 GitHub 存储库
dockerfiles,但具有不同的分支(每个 Docker 映像一个)。然后可以将每个构建配置为仅在适当的分支上触发
使用这些解决方案,问题是我丢失了我所有Dockerfiles 的全局概览。我更喜欢带有单个分支的单个存储库的想法,但我不希望在这个单个分支上的每次推送时都重新构建所有图像。
如果我选择解决方案 1,我不知道 git 是否可以帮助我保留单个存储库 dockerfiles 引用我的所有存储库,例如:
dockerfiles (GitHub repo)
|- docker-image-1 -> link to https://github.com/norbjd/docker-image-1
|- Dockerfile
|- docker-image-2 -> link to https://github.com/norbjd/docker-image-2
|- Dockerfile
然后克隆整个项目并执行拉取请求会更容易(因为一些图像是相关的:更新docker-image-1/Dockerfile 可能导致更新docker-image-2/Dockerfile)。我读过关于 Git 子模块和子树的信息,但我不知道这些在这里是否合适。
也许使用单个存储库是可能的,只需找到正确的 Docker Hub 构建设置。
最佳做法是什么?
【问题讨论】: