什么是Docker仓库?

6

我似乎找不到Docker仓库的确切定义。通常的标记方法似乎是用户名/镜像名。

当然,它包含Docker镜像,但它们是否需要是同一镜像的不同版本还是可以是不同的Docker镜像呢?

例如,我能否将App1、App2等放在同一个Docker仓库中,并使用标签来区分它们。


1
只是为了严谨起见;仓库存储的是图像,而不是容器。 - Adrian Mouat
谢谢@AdrianMouat,你是正确的。我在语言使用方面有些草率。我已经进行了编辑和更正。 - Ashley Aitken
3个回答

2
我认为答案是Docker Repository是一个带有标签的图像版本集合。虽然它们在技术上可能是语义上不同的图像,区别可能由标签表示,但这将会导致1)混淆,因为它们都具有相同的图像名称(对于使用这些图像的人类和软件来说很困惑),2)不符合存储库的预期用途,就我所知,3)可能与Docker Hub托管的公共和私有存储库的商业模型相冲突。
我从未打算试图打破那个商业模式,只是有些困惑,因为术语“repository”通常意味着比单个概念实体更一般的东西。 Docker提供了在您自己的注册表中私有地托管许多存储库的能力。

2
如果 Docker 文档建议一个仓库只包含一个 Dockerfile,并解释该仓库指的是从该 Dockerfile 构建的所有不同镜像(版本),那将会非常有帮助。 - b01

2
按照惯例,Docker镜像的命名格式为<owner>/<application>:<tag>。如果您希望将不同的应用程序保存在同一仓库中(例如:除非您强制要求关联,否则不必使用相关的不同标签),那么并没有任何技术限制,您可以拥有例如mycompany/myuser:app1mycompany/myuser:app2。但是,这不是您会发现大多数公共图像的方式,它们被标记为我之前提到的那样。

谢谢。我想唯一的问题就是只有一个“latest”,所以我们必须明确指示每个容器的标签。 - Ashley Aitken

2
根据Docker Doc
一个注册表(registry)是存储库(repository)的集合,而存储库是镜像的集合——有点像 GitHub 存储库,只不过代码已经构建好了。
将本地镜像与注册表上的存储库相关联的表示方法是“用户名/存储库名称:标签”。标签是可选的,但建议使用;它是注册表用来为 Docker 镜像提供版本的机制。因此,将所有这些内容放在一起,输入您的用户名、存储库和标签名称,使您现有的镜像上传到所需的目的地: docker tag friendlyhello username/repository:tag 我也发现在这种情况下使用“存储库”这个词有点令人困惑。最终,存储库旨在包含镜像的所有版本,使用标签“latest”来指定在使用“docker pull”命令时未指定标签时要拉取的镜像。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接