帮助改进此页面
要帮助改进本用户指南,请选择位于每个页面右侧窗格中的在 GitHub 上编辑此页面链接。
将容器镜像从一个存储库复制到另一个存储库
本主题介绍如何从节点无权访问的存储库中提取容器镜像,然后将该镜像推送到节点有权访问的存储库。您可以将镜像推送到 Amazon ECR 或节点有权访问的备用存储库。
-
已在计算机上安装并配置 Docker 引擎。有关说明,请参阅 Docker 文档中的安装 Docker 引擎
。 -
在您的设备或 Amazon CloudShell 上安装和配置 Amazon 命令行界面(Amazon CLI)的版本
2.12.3
或更高版本,或版本1.27.160
或更高版本。要查看当前版本,请使用aws --version | cut -d / -f2 | cut -d ' ' -f1
。yum
、apt-get
或适用于 macOS 的 Homebrew 等软件包管理器通常比 Amazon CLI 的最新版本落后几个版本。要安装最新版本,请参阅《Amazon 命令行界面用户指南》中的安装和使用 aws configure 快速配置。Amazon CloudShell 中安装的 Amazon CLI 版本也可能比最新版本落后几个版本。要对其进行更新,请参阅《Amazon CloudShell 用户指南》中的将 Amazon CLI 安装到您的主目录。 -
如果您希望节点通过 Amazon 的网络从私有 Amazon ECR 存储库中提取容器镜像或将容器镜像推送到私有 Amazon ECR 存储库,请为 Amazon ECR 创建接口 VPC 端点。有关更多信息,请参阅 Amazon Elastic Container Registry 用户指南中的为 Amazon ECR 创建 VPC 端点。
请完成以下步骤,以从存储库中提取容器镜像并将其推送到自己的存储库。在本主题提供的以下示例中,将提取 Kubernetes 指标帮助程序的 Amazon VPC CNI 插件示例值
替换为您自己的值。
-
如果您还没有 Amazon ECR 存储库或其它存储库,请创建一个节点可以访问的存储库。以下命令将创建一个 Amazon ECR 私有存储库。Amazon ECR 私有存储库的名称必须以字母开头。它只能包含小写字母、数字、连字符 (-)、下划线 (_) 和正斜杠 (/)。有关更多信息,请参阅 Amazon Elastic Container Registry 用户指南中的创建私有存储库。
您可以将
cni-metrics-helper
替换为所选的任何内容。作为最佳实践,请为每个镜像创建单独的存储库。我们建议您这样做,因为镜像标签在存储库中必须唯一。请将region-code
替换为 Amazon ECR 支持的 Amazon 区域。aws ecr create-repository --region region-code --repository-name cni-metrics-helper
-
请确定节点需要提取的镜像的注册表、存储库和标签(可选)。此信息采用
registry/repository[:tag]
格式。许多关于安装镜像的 Amazon EKS 主题都要求您应用清单文件或使用 Helm 图表安装镜像。但是,在应用清单文件或安装 Helm 图表之前,请先查看清单或图表
values.yaml
文件的内容。这样您就可以确定要提取的注册表、存储库和标签。例如,您可以在 Kubernetes 指标帮助程序的 Amazon VPC CNI 插件
的清单文件 中找到以下行。 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.12.6"
您可能会看到镜像位置的以下变体:
-
仅限
repository-name:tag
。在本例中,docker.io
通常是未指定的注册表,因为如果没有指定注册表,默认情况下 Kubernetes 会将它置于存储库名称前面。 -
repository-name/repository-namespace/repository:tag
。存储库命名空间为可选,但有时由存储库所有者指定以用于对镜像进行分类。例如,Amazon ECR 公开映像浏览馆中的所有 Amazon EC2 镜像都使用 aws-ec2
命名空间。在使用 Helm 安装镜像之前,请查看 Helm
values.yaml
文件以确定镜像位置。例如,Kubernetes 指标帮助程序的 Amazon VPC CNI 插件的 values.yaml 文件包括以下行。 image: region: us-west-2 tag: v1.12.6 account: "602401143452" domain: "amazonaws.com"
-
-
请提取清单文件中指定的容器镜像。
-
如果从公有注册表中提取,例如 Amazon ECR 公开映像浏览馆
,则可以跳到下一个子步骤,因为不需要身份验证。在此示例中,您可以对包含 CNI 指标帮助程序映像存储库的 Amazon ECR 私有注册表进行身份验证。Amazon EKS 在查看 Amazon EKS 附加组件的 Amazon 容器映像注册表中所列的每个注册表中维护映像。通过将 602401143452
和region-code
替换为其它注册表的信息,您可以向任何注册表进行身份验证。支持 Amazon EKS 的每个 Amazon 区域都存在一个单独的注册表。aws ecr get-login-password --region region-code | docker login --username Amazon --password-stdin 602401143452.dkr.ecr.region-code.amazonaws.com
-
提取镜像。在此示例中,您从上一个子步骤中进行身份验证的注册表中提取。将
602401143452
和region-code
替换为您在上一个子步骤中提供的信息。docker pull 602401143452.dkr.ecr.region-code.amazonaws.com/cni-metrics-helper:v1.12.6
-
-
请使用您的注册表、存储库和标签来标记提取的镜像。以下示例假设您从清单文件中提取镜像,然后将其推送到您在第一步中创建的 Amazon ECR 私有存储库。请将
111122223333
替换为您的账户 ID。将region-code
替换为您在其中创建 Amazon ECR 私有存储库的 Amazon 区域。docker tag cni-metrics-helper:v1.12.6 111122223333.dkr.ecr.region-code.amazonaws.com/cni-metrics-helper:v1.12.6
-
对注册表进行身份验证。在此示例中,您可以对在第一步中创建的 Amazon ECR 私有注册表进行身份验证。有关更多信息,请参阅 Amazon Elastic Container Registry 用户指南中的注册表身份验证。
aws ecr get-login-password --region region-code | docker login --username Amazon --password-stdin 111122223333.dkr.ecr.region-code.amazonaws.com
-
将镜像推送到存储库。在此示例中,您将镜像推送到在第一步中创建的 Amazon ECR 私有存储库。有关更多信息,请参阅 Amazon Elastic Container Registry 用户指南中的推送 Docker 镜像。
docker push 111122223333.dkr.ecr.region-code.amazonaws.com/cni-metrics-helper:v1.12.6
-
请使用您推送的镜像
registry/repository:tag
来更新在上一步中用于确定镜像的清单文件。如果您使用 Helm 图表进行安装,通常可以选择指定registry/repository:tag
。安装图表时,请为您推送到存储库的镜像指定registry/repository:tag
。