答案 0 :(得分:1)
通常,当您要简化构建/测试/部署过程时,可以使用CI,CD管道,并且通常情况下,如果要维护对企业至关重要的生产基础架构,则会发生这种情况。
如果您只是在玩/制作IMO原型,则不需要CI / CD管道,在这种情况下,您可以在计算机上直接构建docker映像,或者将映像保存。那是完全合理的。
将“注册表”视为二进制映像的存储库(即理想情况下已确定版本的代码的固定版本,并且您知道有效)
然后,部署就像告诉服务器从任何位置拉出映像并运行它一样简单。
在灵活的体系结构上,您可能会随时使节点上升或下降,并且它们需要能够从某个地方提取最新代码以随时自动恢复并运行,< / p>
答案 1 :(得分:0)
在这种情况下,注册表是事实的唯一来源。这意味着,您可以有多个节点(服务器)和群集,并且只有一个位置可以从中获取图像。另外,如果您的节点下拉菜单中-您可以在新节点中快速启动映像。您还可以使用注册表的Webhook自动更新映像,例如,当您添加映像注册表的新版本时,会将Webhook发送到可以将容器升级到最新版本的任何服务。
答案 2 :(得分:0)
将docker image视为将软件分发到服务器的一种新方法,将docker-registry视为共享映像的集中存储(例如js的npm.org,java的maven.org)。
例如,
如果您开发 java应用程序,则可以在docker之前的几年使用.jar
文件来完成。 docker镜像更好的方式是还包括所有操作系统级别的依存关系,例如JDK
/ JRE
和系统配置。因此,这有助于您避免“在我的计算机上运行”的影响。
要分发docker image
,您还可以仅使用docker文件并始终在每台计算机上构建该文件。 Docker-Repository
使您可以集中存储预构建图像。
在CI / CD中推送到docker-repository允许一次构建您的发行版,并进一步在集成和产品环境中使用相同的发行版进行工作。
仅使用Dockerfile
并不能保证您每次都在每个构建版本上保持相同的状态,因为您可能会在Dockerfile
脚本中安装外部依赖关系,而这些依赖关系可能会在更新之间删除甚至删除。两个顺序构建。
答案 3 :(得分:0)
这有什么目的?是因为我要进入的服务器需要具有映像的本地副本吗?为此,一种方法是从注册表中提取图像?
从CI / CD角度来看,泊坞窗注册表相当于图像的工件存储库。您希望从一台Docker主机到另一台Docker主机的过程中,从这些镜像的中央源下载资源,因为您的构建服务器很可能不同于您的dev和prod服务器。
我是否只能通过ssh从一台计算机(例如CI / CD服务器)上载图像?对我来说,使用dockerhub似乎毫无礼节。就像在this示例中一样(我知道此api已过时,但它说明了我的观点)。
可以将图像直接保存/加载到Docker主机,但是有一些主要缺点。首先,您将失去Docker分层文件系统的任何好处。在CI / CD中构建应用程序时,大多数情况下,只需更改应用程序即可重建最后几层。应该有相同的先前基本图像和各种通用层来构建您的应用程序,并且保持相同。使用注册表,可以看到这些公共层,仅压入和拉出不同之处,从而可以更快地部署并节省磁盘空间。使用save / load命令,每次运行时都会发送所有层,因为您在运行保存时不知道远程服务器的状态。
第二,这不会随着您添加主机来运行图像而扩展。每个主机都需要复制映像,以便您在该主机上运行它。处理故障转移或负载平衡。如果您迁移到集群模式或kubernetes,它也将不起作用,因为您可以轻松地将不包含映像的新节点添加到群集中。群集模式默认情况下是在注册表上查找映像的sha256,以确保即使在初始部署后在注册表上修改了标记,也始终使用同一映像。
请记住,您可以运行自己的注册表服务器(有一个docker映像,并且api已打开)。许多工件存储库(例如工件和链接)都包括对Docker注册表的支持。许多云提供商都在其容器产品中包含一个注册表。因此,您无需推送到远程docker hub即可在本地部署。
最后一点是,注册服务器对开发人员很有用,他们现在可以提取dev和prod中使用的相同映像来针对他们在本地编写的其他微服务进行测试,而无需在本地构建所有内容或ssh到CI / CD。服务器,甚至将产品保存并存储到笔记本电脑中。