nor*_*bjd 6 git docker dockerhub
我想dockerfiles
在GitHub上创建一个存储库以集中Dockerfile
我到目前为止创建的所有自定义代码。我还想独立地自动在Docker Hub上自动化每个映像的构建。
GitHub上有很多这样的存储库:
(我不会在这里谈论最繁星的存储库:https : //github.com/jessfraz/dockerfiles,因为正如您在Docker Hub上看到的那样,这些不是自动构建)
dockerfiles
存储库结构我希望我的dockerfiles
GitHub存储库具有以下结构(分支master
),基于上面提到的GitHub存储库:
dockerfiles (GitHub repo)
|- docker-image-1
|- Dockerfile
|- docker-image-2
|- Dockerfile
|- ...
Run Code Online (Sandbox Code Playgroud)
在Docker Hub上,我可以创建2个公共自动化构建版本:docker-image-1
和docker-image-2
,都引用我的dockerfiles
GitHub存储库,但是构建设置不同(实际上,只有Dockerfile位置不同):
docker-image-1
:
docker-image-2
:
使用此配置,如果进行了push on 分支,则将重建所有映像master
(即使Dockerfile
push 仅涉及1个,而Dockerfile Location也不同)。我检查了一下,似乎对vimagick的存储库进行了这样的配置。但是我认为这不是正确的方法(如果我错了,请告诉我)。
当然,在每个自动构建的构建设置中,我可以禁用选项“ 当活动时,构建将在推送时自动发生 ”以避免这种情况,但是我必须根据Dockerfile
我的更新内容手动触发每个构建(不是自动的) )。
我看到的改善自动化的解决方案是:
Dockerfile
在自己的GitHub存储库中。没有更多的dockerfiles
存储库,因此每个存储库都有自己的工作流程dockerfiles
,但具有不同的分支(每个Docker映像一个)。然后可以将每个构建配置为仅在适当的分支上触发使用这些解决方案,问题在于我失去了所有S 的全局概览Dockerfile
。我更喜欢使用带有单个分支的单个存储库的想法,但是我不希望在此单个分支上的每次推送都重建所有图像。
如果我选择解决方案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
Run Code Online (Sandbox Code Playgroud)
然后,克隆整个项目并执行“拉取请求”会更容易(因为某些图像是相关的:更新docker-image-1/Dockerfile
可能导致update docker-image-2/Dockerfile
)。我已经阅读了有关Git子模块和子树的信息,但是我不知道这些在这里是否合适。
也许只有一个存储库是可能的,而这仅仅是找到正确的Docker Hub构建设置。
最佳做法是什么?
首先,没有最佳实践,只有适合您的方法。正如我所见,关于公共存储库的决定 1.) 和 2.) 对于dockerfiles
应用 Docker Hub 自动化来说都非常好,但我建议像您提到的那样补充它们git submodules
或git subtrees
。我不会详细介绍 Docker Hub 自动化,而是介绍如何保留公共存储库dockerfiles
:
1.) 您可以将图像分离到自己的 GitHub 存储库Dockerfile
中。然后在你的我建议使用:dockerfiles
git submodule
git submodule add https://github.com/norbjd/docker-image-1
git commit -m "Add docker-image-1 as submodule"
Run Code Online (Sandbox Code Playgroud)
不幸的是,您不能使用子模块仅选择一个文件,而是可以链接到原始存储库。您可以查看从另一个 git 存储库链接单个文件以及git: symlink/reference to a file in an external repository。但要小心子模块,因为如果除了您之外的其他人想要使用它,子模块也有众所周知的缺点。我还在这里举了一个例子来向您展示它的样子。
2.) 您只能使用一个 GitHub dockerfiles 存储库,但随后我会使用git subtree
. 您可以使用不同分支中的子树来拆分您的存储库,从而使用一个非常干净的树来组织多个模块。
git subtree split --prefix=docker-image-1 -b docker-image-1-subtree
Run Code Online (Sandbox Code Playgroud)
查看这篇文章以获取有关子树的更多信息。我没有时间给git subtree
你举个例子,但我想你能明白我的意思。
因此,作为纯粹主义者,我不会推荐使用它git submodule
,而且我读到很多人都说git subtree
它很棒,所以我会选择选项 2。)。但我根本不是纯粹主义者,分离存储库可以简化 Docker Hub 自动化,而且这是 CI 原则,因此请选择最适合您需求的选项。
归档时间: |
|
查看次数: |
267 次 |
最近记录: |