AWS ECR Public

ECR(Elastic Container Registry) 公有镜像仓库是AWS reInvent 2020新发布的功能。之前ECR只支持私有仓库,现在用户能够上传公有镜像供他人下载使用。可将其理解为和docker hub一样的功能。 公有镜像仓库地址 AWS ECR公有镜像仓库地址:https://gallery.ecr.aws/,目前里面共有1000多个镜像。 发布公有镜像 在ECR console创建一个公有仓库过程如下: 在创建存储库时,可同时上传仓库的logo、添加描述等: 在About和Usage模块,支持输入markdown语法的介绍: 创建完成后,在界面里能够看到这个公有镜像仓库。在旁边有按钮可以查看推送指令: 推送过程也很简单:首先进行ECR登录认证,然后就是build、tag、push老三样。 为了方便,这里我将直接将redis镜像推送上去: 上传成功后,在ECR公共仓库里能搜索到这个镜像,现在任何人都可以下载并运行。 拉取公有镜像 在ECR public gallery里找到镜像地址,: 此时,我在另一台电脑上执行: docker pull public.ecr.aws/f3s7a1p8/pingfan:latest #拉取下来镜像后,启动容器: docker run public.ecr.aws/f3s7a1p8/pingfan:latest 上面这个容器成功启动了redis服务。 写在最后 为了高可用,ECR公有仓库的镜像存储在两个region。 另外,在拉取镜像时使用了CloudFront,所以一些热门镜像的拉取速度绝对有保证。 ECR公有镜像可以与其他AWS服务集成。例如,当上传完公有镜像时通知CodeBuild 价格分为存储费用和流量费用两部分,详情见https://aws.amazon.com/ecr/pricing/?nc1=h_ls 存储。存储小于50GB时免费,超出部分按0.1$/GB每月收费。 流量费用没看太懂。超出500GB部分收费。 点评: 不收费我就不叫AWS,连公有镜像都敢收你钱。

AWS ECR Cross Region Replication

跨Region复制镜像之前是AWS ECR缺失的功能,不过可以通过Cloudformation实现(https://github.com/aws-samples/amazon-ecr-cross-region-replication)。 在reInvent2020中,终于发布了ECR的Cross Region Replication (CRR)新功能 😄 CRR有以下优点: 可以将镜像复制到其他帐号/区域, 减少了拉取镜像时带来的网络延迟,部署上线更快。 高可用,毕竟同一份镜像分布在几个区域。 使用场景 假设有两个团队,开发团队位于欧洲(eu-west-1),运维团队位于美国(us-west-2)。 开发团队打包完镜像后,需要同步到运维团队所在的region。 有了CRR后,开发团队只需要通过CodePipeline将镜像上传到eu-west-1区域的仓库,此镜像就会自动同步到us-west-2区域,于是运维团队可以将此镜像部署到EKS/ECS上。 CRR实践 我们将实现上面的场景,将上传到eu-west-1的镜像自动同步到us-west-2。 默认情况下,CRR功能是关闭的,要在eu-west-1的ECR开启CRR: 复制的目标区域是us-west-2: 在eu-west-1创建一个仓库(下面全是通过cli创建,也可以通过console创建): aws ecr create-repository --repository-name crr-test --region eu-west-1 创建完成后,在控制台显示如下: 在eu-west-1进行仓库登录授权: aws ecr get-login-password --region eu-west-1 | \ docker login --username AWS --password-stdin \ 123456789012.dkr.ecr.eu-west-1.amazonaws.com 将上面的123456789012替换成真实的AWS帐户ID 将镜像上传到源区域 (eu-west-1): docker pull nginx docker tag nginx:latest 123456789012.dkr.ecr.eu-west-1.amazonaws.com/crr-test docker push 123456789012.dkr.ecr.us-west-2.amazonaws.com/mservice:42 将上面的123456789012替换成真实的AWS帐户ID 经过上面的步骤,镜像成功上传到了eu-west-1区域,现在切换到us-west-2区域进行验证: aws ecr get-login-password --region us-west-2 | \ docker login --username AWS --password-stdin \ 123456789012.