许多构建应用程序的容器客户使用公共软件包(例如操作系统、数据库和应用程序组件),这些软件包在Docker Hub上作为容器镜像公开分发。Docker,Inc.。宣布Hub服务将开始限制其匿名和免费计划下的图像拉取速率。这些限制将从2020年11月2日起逐步生效。一旦完全到位,免费计划匿名使用将限制为每六小时100拉,免费计划认证帐户限制为每六小时200拉,专业和团队帐户将不会看到任何费率限制。
随着这些限制的引入,我们的客户应该预料到,他们的一些使用Docker Hub公共映像的应用程序和工具将面临节流错误,例如,当他们从父公共映像构建或拉出公共映像运行时。我们的许多客户都表达了对可能的影响的担忧,因此我们将分享一些关于管理Docker Hub的速率限制的实用建议,并宣布即将推出的AWS解决方案。
如果客户看到影响,我们建议的总体方法是首先确定正在使用的公共容器映像,然后选择缓解方法并采取必要步骤。
您可以通过在FROM命令的源代码中搜索名为Dockerfile的文件来识别Docker Hub公共镜像。如果在图像和标签之前没有注册表URL,则该图像在运行时将从Docker Hub拉取。例如,from amazonlinux:Latest从Docker Hub获取最新的amazonlinux版本,作为应用程序映像构建中的父映像。为了完整性,还要在容器应用程序集群配置中搜索公共映像。我们正在开发一种工具来自动执行这些步骤,以便更轻松地生成源存储库、Amazon Elastic Container Service(ECS)和Amazon Elastic Kubernetes Service(EKS)群集中的所有公共映像的列表。我们将在几天内更新此博客,提供有关此工具的更多详细信息,包括其可用性,请务必回来查看。
我们推荐两种缓解方法。其一,将正在使用的公共映像复制到私有注册表中,如Amazon Elastic Container Registry(ECR)。或者第二,升级到付费Docker Hub订阅。这两种方法都需要切换到经过身份验证的拉取模型。ECS客户可以按照这些说明对任务拉入请求进行身份验证。Kubernetes客户(包括EKS用户)可以按照以下说明对Worker节点或实例拉取进行身份验证。请注意,如果具备AWS Identity and Access Management(IAM)前提条件,则可以提取复制到ECR的公共映像,而无需额外的身份验证工作。此处记录了ECS和EKS的IAM认证拉取的前提条件。也使用第三方系统的客户可以参考此Docker链接,了解更多经过身份验证的拉取文档。
AWS将Amazon ECS代理作为公共容器映像发布,并将其预装在所有经过ECS优化的Amazon机器映像(AMI)上。任何使用ECS优化AMI的实例都不依赖Docker Hub启动实例,因此使用这些AMI的客户不会受到Docker Hub对ECS代理容器镜像拉取限制的影响。使用AWS控制台或CLI将代理更新到最新版本的客户在升级时也不会受到速率限制的影响,因为升级过程会从Amazon S3下载最新的ECS代理映像,并且不依赖Docker Hub。
创建自己的AMI以用于ECS或使用第三方AMI的客户必须管理ECS代理的安装和升级。这些客户可以将自己的ECS代理副本存储在私有注册表(如ECR)中,然后从那里提取、从AWS拥有的公共S3存储桶下载,或者从Docker Hub提取映像。从Docker Hub下载ECS代理的客户可能会受到Docker Hub速率限制。为了缓解速率限制影响,这些客户可以采取上述步骤来管理Docker的拉动率影响。
目前,EKS群集附带的所有EKS附加软件都托管在ECR上,不受Docker Hub速率限制。EKS构建和维护的项目(如AWS负载均衡器控制器)也包括引用ECR上图像的舵图。但是,GitHub上提供的这些项目的清单包括对发布到Docker Hub的图像的引用。您可以使用本博客中描述的步骤检查是否将清单与Docker Hub映像一起使用,并更新以使用引用ECR托管映像的图表。这些图表位于EKS Charts GitHub存储库中。
如今,Amazon Elastic Container Registry(ECR)客户每周下载数十亿个映像,使他们能够部署容器,以便在其内部运行的应用程序和AWS中使用。诸如Docker Hub费率限制之类的事件强化了这样一个事实,即公共容器映像是容器软件供应链的关键部分。客户要求我们帮助使他们使用的公共容器映像与ECR中托管的映像一样具有高度可用性和可靠性。
我们已经花了好几个月的时间来回答这个客户的问题。在几周内,AWS将提供一个新的公共容器注册表,允许开发人员公开共享和部署容器镜像。这个新的注册表将允许开发人员存储、管理、共享和部署容器映像,以供任何人发现和下载。开发者将能够使用AWS来托管他们的私有和公共容器镜像,从而无需使用不同的公共网站和注册中心。公共映像将在全球范围内进行地理复制,以实现可靠的可用性,并提供快速下载以快速按需提供映像。任何人(无论是否拥有AWS帐户)都可以浏览和获取集装箱化软件,以便在自己的应用程序中使用。开发人员将能够使用新的注册表分发公共容器图像和相关文件,如舵图和策略配置,供任何开发人员使用。一个新网站将允许任何人浏览和搜索公共容器图像、查看开发人员提供的详细信息以及查看Pull命令-所有这些都无需登录到AWS。还将提供AWS提供的公共映像,如ECS代理、Amazon CloudWatch代理和AWS Deep Learning Container映像。
AWS客户在使用公共容器镜像时将享受流畅、可靠的体验,并且定价可提供额外价值。在AWS上共享公共图像的开发者每月将获得50 GB的免费存储空间,之后将象征性地支付费用。任何匿名拉取图片的人每月都将获得500 GB的免费数据带宽,之后他们可以注册或登录AWS账户。只需使用AWS帐户进行身份验证,在从互联网提取图像时,每月的免费数据带宽最高可达5 TB。最后,在AWS中运行的工作负载在拉取托管在AWS上的公开共享映像时,将从任何地区获得无限制的数据带宽。