我想在GitHub上创建一个dockerfiles
存储库,以集中我迄今为止创建的所有自定义Dockerfile
s。我还想独立地自动化Docker Hub上每个映像的构建。
GitHub上有许多类似的存储库:
(我不会在这里谈论最星号的存储库:https://github.com/jessfraz/dockerfiles,因为正如您在Docker Hub上看到的,这些不是自动构建)
我希望我的泊坞文件
GitHub存储库具有以下结构(分支主节点
),基于我上面提到的GitHub存储库:
dockerfiles (GitHub repo)
|- docker-image-1
|- Dockerfile
|- docker-image-2
|- Dockerfile
|- ...
在 Docker Hub 上,我可以创建 2 个公共自动构建版本:docker-image-1
和 docker-image-2
,两者都引用我的 dockerfile
GitHub 存储库,但具有不同的构建设置(实际上,只有 Dockerfile 位置不同):
泊坞窗映像-1
:
使用这种配置,如果在< code>master分支上进行推送,将会重建所有映像(即使只有一个< code>Dockerfile与推送和Dockerfile位置不同有关)。我查过了,vimagick的资源库好像是这样配置的。但我觉得这不是正确的方法(如果我错了,告诉我)。
当然,在每个自动构建的构建设置中,我可以禁用选项“当激活时,构建将在推送时自动发生”来避免这种情况,但我必须根据我更新的< code>Dockerfile手动触发每个构建(非自动)。
我认为可以改进自动化的解决方案有:
Dockerfile
。没有更多的dockerfiles
存储库,所以每个都有自己的工作流程dockerfiles
,但具有不同的分支(每个Docker映像一个)。然后可以将每个构建配置为仅在适当的分支上触发使用这些解决方案,问题是我丢失了所有< code>Dockerfile的全局概览。我更喜欢具有单个分支的单个存储库的想法,但我不希望在这个单个分支上的每次推送中重建所有映像。
如果我选择解决方案1,我不知道git
是否可以帮助我保持单个存储库dockerfiles
reference我的所有存储库,例如:
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
然后,克隆整个项目并执行拉取请求会更容易(因为某些图像是相关的:更新泊坞窗映像-1/Dockerfile
可能会导致更新泊坞窗映像-2/Dockerfile
)。我已经阅读了有关Git子模块和子树的信息,但我不知道这些在这里是否合适。
也许可以使用单个存储库,只需找到正确的Docker Hub构建设置。
最佳实践是什么?
首先,除了对你有用的东西,没有最佳实践。如我所见,关于公共存储库dockerfiles
的决定1.)和2.)对于应用Docker Hub自动化来说都是很好的,但我建议用git子模块dockerfiles
:
1.)您可以在自己的GitHub存储库中分离Dockerfile
图像。然后,在您的dockerfiles
中,我建议使用git子模块:
git submodule add https://github.com/norbjd/docker-image-1
git commit -m "Add docker-image-1 as submodule"
遗憾的是,您不能使用子模块AFAIK只选择一个文件,而是有指向源repo的链接。您可以查看将单个文件从另一个git存储库链接,以及将git:symlink/reference链接到外部存储库中的文件。但是要小心子模块,因为如果除您之外的其他人想使用它,那么它有众所周知的缺点。我还举了一个例子,向你展示它的样子。
2.)您只能使用一个GitHub dockerfiles存储库,但是我会使用< code>git subtree
。您可以使用不同分支中的子树来拆分您的回购协议,让几个模块以一个非常干净的树来组织。
git subtree split --prefix=docker-image-1 -b docker-image-1-subtree
查看此帖子以了解关于子树的更多信息。我没有时间玩< code>git subtree来给你一个例子,但是我想你会明白的。
因此,作为纯粹主义者,我不建议使用git子模块
,我读过很多人说git子树
is awose,所以我会选择选项2。)。但我根本不是一个纯粹主义者,分离回购将简化Docker Hub自动化,也是一个CI原则,所以选择最适合您需求的选项。
我正在使用自动构建为基准测试套件创建docker映像。在其中一个基准测试中,即网络搜索,我必须使用一个非常大的索引文件(11GB)。我的映像没有被构建,我收到了这个错误: 但是当我检查很长的构建日志时,在最后一行中,我可以看到它实际上已经成功构建: 似乎负责创建该映像的工作进程失去了与其主节点(注册表节点)的连接,而它仍在处理和构建映像。这可能是因为下载索引文件需要几个小时。 我能做些什么来防止这
对于Docker Hub项目,如何找到手动触发或通过触发url触发的自动化构建的状态。 < li >我想了解它是否正在运行,以及它当前的运行状态(即仍在运行还是构建已完成) < li >过去版本列表 < li >所有构建的状态(启动时间、完成时间、构建状态)
我很难为个人项目设置golang dockerfile。 项目结构为: 该应用程序每5秒打印一个随机哈希,并在其上附加一个时间戳。 文件内容: 日志 go.mod: hash.go: 我拼凑了以下泊坞文件: 然而,我一直得到这个错误(和类似的错误): 我已经在网上搜索了几个小时试图解决这个问题,我真的不明白它有什么问题。当谈到docker文件中的依赖管理时,我怀疑我做错了什么。 我提到我是围棋新手
在自动化的dockerhub构建过程中,是否有一种方法可以连接到多个私有git回购?我们正在构建golang应用程序,需要‘去获取’其他私人回购作为我们构建的一部分,目前他们失败了,因为docker无法连接到他们,只有目标私人回购。 主回购很好,因为部署密钥是通过Dockerhub安装的,但是任何后续的私有回购导入都失败了。
我正在尝试使用Flask和Docker开发一个小型音乐应用程序。我有两个码头服务,都在经营烧瓶。 第一个称为上传器: 第二个渲染了一个Jinja模板,该模板试图播放此API返回的文件: 另外,这些组件工作正常。但当一起使用时,文件不会播放。我已经尝试了我在网上找到的几乎所有东西,但似乎都不起作用。任何帮助将不胜感激。谢谢! 编辑:添加了泊动器撰写文件。两个泊坞窗映像都是在本地构建的。
问题内容: 我正在docker容器内的GCE上运行jenkins实例,并希望从此Jenkinsfile和Github执行多分支管道。我正在为此使用GCE詹金斯教程。这是我的 我总是得到一个错误: 为了使docker在jenkins中工作,我需要更改什么? 问题答案: 看起来像DiD(Docker中的Docker),最近的一期杂志指出这是有问题的。 请参阅“ 在您的CI或测试环境中使用Docker-