ECR - 啥是注册表,啥是存储库
Posted
技术标签:
【中文标题】ECR - 啥是注册表,啥是存储库【英文标题】:ECR - What is the registry and what is a repositoryECR - 什么是注册表,什么是存储库 【发布时间】:2018-02-24 03:08:02 【问题描述】:尝试熟悉 ECR - 我知道您应该能够将任意数量的存储库推送到 Docker 注册表。
但是,ECR 有一个“存储库”的概念。 因此,如果我有 10 个不同的容器组成我的应用程序,这是否意味着我需要 10 个存储库中的注册表?
我可以拥有一个存储库并推送 10 个带有“最新”标签的不同容器吗?
目前,如果我用相同的 registry/repository_name 模式标记另一个图像,它会替换我另一个图像上的 latest
标记:
【问题讨论】:
【参考方案1】:如果你想获得详细的描述,我会查看What Is Amazon EC2 Container Registry?页面,它详细描述了组件,但两者之间的高级区别是:每个帐户都有注册表,每个注册表可以包含几个存储库。 每个存储库可以包含多个图像。一个图像可以有多个标签,一个标签在每个存储库中只能存在一次。
如果您查看对存储库的引用:
[account].dkr.ecr.[region].amazonaws.com/[repository_name]
第一个/
前面的部分是您的注册表,第一个/
之后的部分是您的存储库。
因此,您在这里遇到的是,通过将第二个图像推送到同一个存储库,您正在更改 latest
标记指向的引用。
如果您想拥有多个不同的图像,每个图像都有自己的latest
标签,每个图像都应该有自己的存储库。基于 ECR 的定价,you only pay based on the storage size and transfer from an ECR Repo,因此不创建额外的回购几乎没有什么好处。
【讨论】:
但是,问题是如果我想从 CI 推送新图像,我需要有一个具有“创建存储库”权限的不同 IAM 主体;或预先创建所有存储库。如果我可以直接推送到注册表,那就更有意义了。例如我在 ECR 存储库概念中看不到任何价值。 啊,这听起来像是您的问题中最初包含的有用信息。也就是说,考虑到您正在考虑将所有图像放在一个存储库中,我认为允许您的 CI 创建新存储库没有不利之处。如果我正确理解您的用例,我不知道有任何 docker 注册表非常适合您的用例。 自动存储库创建将解决这个问题,这是一个强烈要求但仍然只是一个建议:github.com/aws/containers-roadmap/issues/853 和 github.com/aws/containers-roadmap/issues/799。以上是关于ECR - 啥是注册表,啥是存储库的主要内容,如果未能解决你的问题,请参考以下文章