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