将容器镜像从一个存储库复制到另一个存储库
本主题介绍如何从节点无权访问的存储库中提取容器镜像,然后将该镜像推送到节点有权访问的存储库。您可以将镜像推送到 Amazon ECR 或节点有权访问的备用存储库。
先决条件
-
您的计算机上安装和配置的 Docker 引擎。有关说明,请参阅 Docker 文档中的安装 Docker 引擎
。 -
您的设备或 Amazon CloudShell 上安装并配置了
2.7.21版或更高版本,或1.25.46版或更高版本的 Amazon CLI。有关更多信息,请参阅 Amazon Command Line Interface 用户指南中的安装、更新和卸载 Amazon CLI 以及使用aws configure进行快速配置。 -
如果您希望节点通过 Amazon 的网络从私有 Amazon ECR 存储库中提取容器镜像或将容器镜像推送到私有 Amazon ECR 存储库,请为 Amazon ECR 创建接口 VPC 端点。有关更多信息,请参阅 Amazon Elastic Container Registry 用户指南中的为 Amazon ECR 创建 VPC 端点。
请完成以下步骤,以从存储库中提取容器镜像并将其推送到自己的存储库。在本主题提供的以下示例中,将提取 指标帮助程序 的镜像。按照这些步骤操作时,请确保将 替换为您自己的值。example values
将容器镜像从一个存储库复制到另一个存储库
-
如果您还没有 Amazon ECR 存储库或其他存储库,请创建一个节点可以访问的存储库。以下命令将创建一个 Amazon ECR 私有存储库。Amazon ECR 私有存储库的名称必须以字母开头。它只能包含小写字母、数字、连字符 (-)、下划线 (_) 和正斜杠 (/)。有关更多信息,请参阅 Amazon Elastic Container Registry 用户指南中的创建私有存储库。
您可以将
替换为您选择的任何名称。作为最佳实践,请为每个镜像创建单独的存储库。我们建议您这样做,因为镜像标签在存储库中必须唯一。将cni-metrics-helper替换为 Amazon ECR 支持的 Amazon Web Services 区域。region-codeaws ecr create-repository --regionregion-code--repository-namecni-metrics-helper -
请确定节点需要提取的镜像的注册表、存储库和标签(可选)。此信息采用
registry/repository[:tag]格式。许多关于安装镜像的 Amazon EKS 主题都要求您应用清单文件或使用 Helm 图表安装镜像。但是,在应用清单文件或安装 Helm 图表之前,请先查看清单或图表
values.yaml文件的内容。这样您就可以确定要提取的注册表、存储库和标签。例如,您可以在 指标帮助程序 的清单文件
中找到以下行。 602401143452.dkr.ecr.us-west-2.amazonaws.com注册表是 Amazon ECR 私有注册表。存储库是cni-metrics-helper。image: "602401143452.dkr.ecr.us-west-2.amazonaws.com/cni-metrics-helper:v1.11.3"您可能会看到镜像位置的以下变体:
-
仅限
repository-name:tag。在本例中,docker.io通常是未指定的注册表,因为如果没有指定注册表,默认情况下 Kubernetes 会将它置于存储库名称前面。 -
repository-name/repository-namespace/repository:tag。存储库命名空间为可选,但有时由存储库所有者指定以用于对镜像进行分类。例如,Amazon ECR Public Gallery 中的所有 Amazon EC2 镜像都使用 aws-ec2命名空间。
在使用 Helm 安装镜像之前,请查看 Helm
values.yaml文件以确定镜像位置。例如,指标帮助程序 的values.yaml文件包括以下行。image: region: us-west-2 tag: v1.11.3 account: "602401143452" domain: "amazonaws.com" -
-
请提取清单文件中指定的容器镜像。
-
如果从公有注册表中提取,例如 Amazon ECR Public Gallery
,则可以跳到下一个子步骤,因为不需要身份验证。在此示例中,您可以对包含 CNI 指标帮助程序映像存储库的 Amazon ECR 私有注册表进行身份验证。Amazon EKS 在 Amazon 容器镜像注册表 中所列的每个注册表中维护映像。通过将 602401143452918309763551和替换为其他注册表的信息,您可以对任何注册表进行身份验证。支持 Amazon EKS 的每个Amazon Web Services 区域 都存在一个单独的注册表。region-codeaws ecr get-login-password --regionregion-code| docker login --username Amazon --password-stdin918309763551.dkr.ecr.region-code.amazonaws.com.cn -
提取镜像。在此示例中,您从上一个子步骤中进行身份验证的注册表中提取。将
961992271922和替换为您在上一个子步骤中提供的信息。region-codedocker pull/cni-metrics-helper:v1.11.3918309763551.dkr.ecr.region-code.amazonaws.com.cn
-
-
请使用您的注册表、存储库和标签来标记提取的镜像。以下示例假设您从清单文件中提取镜像,然后将其推送到您在第一步中创建的 Amazon ECR 私有存储库。请将
替换为您的账户 ID。将111122223333替换为您在其中创建 Amazon ECR 私有存储库的 Amazon Web Services 区域。region-codedocker tag cni-metrics-helper:v1.11.3111122223333.dkr.ecr./region-code.amazonaws.com.cncni-metrics-helper:v1.11.3 -
对注册表进行身份验证。在此示例中,您可以对在第一步中创建的 Amazon ECR 私有注册表进行身份验证。有关更多信息,请参阅 Amazon Elastic Container Registry 用户指南中的注册表身份验证。
aws ecr get-login-password --region| docker login --username Amazon --password-stdinregion-code111122223333.dkr.ecr.region-code.amazonaws.com.cn -
将镜像推送到存储库。在此示例中,您将镜像推送到在第一步中创建的 Amazon ECR 私有存储库。有关更多信息,请参阅 Amazon Elastic Container Registry 用户指南中的推送 Docker 镜像。
docker push111122223333.dkr.ecr./region-code.amazonaws.com.cncni-metrics-helper:v1.11.3 -
请使用您推送的镜像
registry/repository:tag来更新在上一步中用于确定镜像的清单文件。如果您使用 Helm 图表进行安装,通常可以选择指定registry/repository:tag。安装图表时,请为您推送到存储库的镜像指定registry/repository:tag。