Pull through cache

在使用容器镜像时,会有这样的场景:手动将镜像从公共仓库拉取到其私有ECR,然后同时需要保持同步,这增加了操作复杂性和维护成本。

ECR中提供pull through cache特性, 通过pull through cache拉取的镜像会自动与上游仓库保持同步,从而消除定期更新的手动工作。

创建Pull through cache规则

在ECR控制台中选择Private registry,然后编辑pull through cache配置:

image-20231206104934579

选择Add Rule

image-20231206105006635

选择上游仓库,在本示例中为 ECR Public(还支持docker,quay等):

image-20231206105047093

设置一个命名空间,这里使用默认的命名空间ecr-public

image-20231206105117819

最后点击创建,完成后会显示该Role:

image-20231206105135632

使用Pull Through Cache

要引用镜像,必须使用 URL 格式:

<accountId>.dkr.ecr.<region>.amazonaws.com/<namespace>/<sourcerepo>:<tag>

拉取镜像时,将检查与命名空间关联的缓存存储库中的镜像。即使缓存存储库尚不存在,也不必先创建它。该镜像是从与命名空间关联的公共存储库中获取的,然后存储在自动创建的新ECR仓库中。

例如, 将Amazon Linux镜像从Elastic Container Registry Public 拉取到缓存中:

aws ecr get-login-password --region us-west-2 | docker login --username AWS --password-stdin 111122223333.dkr.ecr.sa-east-1.amazonaws.com/ecr-public


docker pull 111122223333.dkr.ecr.us-west-2.amazonaws.com/ecr-public/amazonlinux/amazonlinux:latest

image-20231206110424521

检查存储库页面, 已创建出来一个新的私有存储库,其中包含上面拉取的映像,并指示pull through cache处于活动状态:

image-20231206110642309

  • 在 Dockerfile 中使用pull through cache同样简单,同样使用上面的镜像地址。如果镜像不在缓存存储库中,那么它将被pull并存储在那里。
  • 每 24 小时检查一次缓存镜像,以验证缓存镜像是否是最新版本,计时基于缓存镜像的上次拉取时间。