在git仓库中发布Docker构建配置与通过注册表共享Docker映像之间有何区别?

问题描述

我试图对Docker最佳实践有一个很好的了解,并且试图澄清一件事:

创建和共享有什么区别

  • 通过git repo(例如Dockerfilerequirements.txt)进行docker构建配置
  • 并通过注册表(例如Docker Hub)保存和共享Docker映像?

在第一种情况下,我们必须克隆存储库并运行docker build来创建映像。

这意味着您可以通过运行通过git存储库共享的代码的构建来创建多个图像。

在开始使用Docker或从事个人项目(从Docker开始)时,存储和共享“ Docker代码”(由于缺乏更好的术语)的最佳常规做法是什么?

解决方法

TL; DR

image推送到公共存储库将使其他人可以pull构建imagerun。提供对源代码和Dockerfile的访问权限将使其他人可以build在本地进行映像。它们不是互斥的。


例如,我将公共映像发布到Docker Hub,以便在Kubernetes中运行self-hosted GitHub Actions Runners。使用来自公共GitHub ActionsGitHub repository完成发布。我计划支持released versions (tagged builds from a git tag)(例如,如果有人安装了已发布的版本并报告了问题),但与此同时,人们也可以根据需要为{{3} +1)提供所有可用的工具。无限制地操作(opensource)-说您想向运行程序图像添加一些apt程序包,只需eeet然后构建并使用您自己的图像(...和如果对其他用户有意义,则可以考虑使用所做的更改创建一个MIT License

pull request

您绝对可以托管一个私有存储库并发布公共图像,但是请注意,如果您要隐藏自己的codez,那么您应该期望像我这样的人might be able to host a public repository with a proprietary license but would need to confirm the legalityimage我会尝试使用它,因此建议您构建编译的二进制文件(即inspect构建的go程序。)

您也绝对可以托管私人仓库,并将您的图片发布到FROM scratch,然后控制对图片的访问(即分发配置了您的私人图片的private docker registry,并要求客户docker-compose.yml pull图片)。