我想在dockerfiles上创建一个GitHub存储库,以集中我到目前为止创建的所有自定义Dockerfile。我也想自动构建码头枢纽上的每一个形象,独立。
在GitHub上有许多这样的存储库:
(我不想在这里谈论最著名的存储库:https://github.com/jessfraz/dockerfiles,因为您可以看到论码头枢纽,这些是而不是自动构建)
想要的dockerfiles存储库结构
我希望我的dockerfiles GitHub存储库具有以下结构(分支master),基于我前面提到的GitHub存储库:
dockerfiles (GitHub repo)
|- docker-image-1
|- Dockerfile
|- docker-image-2
|- Dockerfile
|- ...码头枢纽建立自动化
配置
在Docker上,我可以创建两个公共的自动化构建:docker-image-1和docker-image-2,它们都是指我的dockerfiles GitHub存储库,但是使用不同的构建设置(实际上,只有Dockerfile位置不同):
docker-image-1:
docker-image-2:
弊端
使用此配置,如果对分支进行了推送,则将重新生成的所有图像(即使push只关心1 Dockerfile,_Dockerfile Location_s则不同)。我已经检查过了,对于维马迪克储存库,它似乎是这样配置的。但我不认为这是正确的方式(如果我错了,告诉我)。
当然,在每个自动生成的builds中,我可以禁用“当活动时,生成将在推送时自动发生”选项,以避免这种情况,但是我必须手动触发每个构建,这取决于我更新的Dockerfile (不是自动的)。
提高自动化程度?
我看到的提高自动化的解决方案是:
dockerfiles存储库,因此每个库都有自己的工作流。dockerfiles,但是对于使用不同的分支(每个Docker映像一个)。然后,可以将每个构建配置为仅在适当的分支上触发。使用这些解决方案,问题在于我丢失了所有的全局概览。我更喜欢使用单一分支的存储库的想法,但我不希望在这个分支上的每一次推送上都重建所有的映像。
如果选择解决方案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子模块和子树的文章,但是我不知道它们在这里是否合适。
也许使用一个存储库是可能的,它只是关于找到正确的。
什么是最佳做法?
发布于 2019-11-17 23:35:15
首先,没有最佳实践,只有对你有用的东西。如我所见,这两项决定都是1.)和2.)关于通用存储库,dockerfiles很好地应用了Docker自动化,但我建议使用git submodules或git subtrees来补充它们。我不想详细介绍Docker自动化,而是介绍如何保留公共存储库dockerfiles。
1.)您可以将Dockerfile映像分离到它自己的存储库中。那么在您的dockerfiles中,我建议使用git submodule
git submodule add https://github.com/norbjd/docker-image-1
git commit -m "Add docker-image-1 as submodule"不幸的是,您不能AFAIK只选择一个文件使用子模块,相反,您有一个链接到原始回购。您可以看看从另一个git存储库链接单个文件和git:外部存储库中文件的符号链接/引用。但是要小心使用子模块,因为有众所周知的缺点,如果有人想要使用它的话。我还举了一个例子这里,向您展示它的外观。
2.)您只能使用一个GitHub dockerfiles存储库,但接下来我将使用git subtree。您可以在不同的分支中使用子树来分割您的回购,用一个非常干净的树来组织几个模块。
git subtree split --prefix=docker-image-1 -b docker-image-1-subtree有关子树的进一步信息,请查看这个职位。我没有时间玩git subtree来给你举个例子,但我想你可以理解这个问题。
所以,作为纯粹主义者,我不推荐使用git submodule,我读过很多人说git subtree很棒,所以我会选择选择2)。但我根本不是一个纯粹主义者和分开的重新定位将轻松码头枢纽自动化,这也是一个CI原则,所以去选择最适合你的需要。
https://stackoverflow.com/questions/53209370
复制相似问题