

 **協助改進此頁面** 

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

若要為本使用者指南貢獻內容，請點選每個頁面右側面板中的**在 GitHub 上編輯此頁面**連結。

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 將容器映像從一個儲存庫複製到另一個儲存庫
<a name="copy-image-to-repository"></a>

本主題介紹如何從節點無法存取的儲存庫中提取容器映像，並將該映像推送到節點可存取的儲存庫。您可以將映像推送到 Amazon ECR 或節點可存取的替代儲存庫。
+ 電腦上已安裝和設定 Docker 引擎。如需相關說明，請參閱 Docker 文件中的[安裝 Docker 引擎](https://docs.docker.com/engine/install/)。
+ 裝置`2.12.3`或 AWS CloudShell 上安裝和設定的 AWS 命令列界面 (AWS CLI) 版本 `1.27.160` 或更新版本。若要檢查您目前的版本，請使用 `aws --version | cut -d / -f2 | cut -d ' ' -f1`。適用於 macOS 的 `yum`、 `apt-get`或 Homebrew 等套件管理員通常是最新版本 CLI AWS 後面的幾個版本。若要安裝最新版本，請參閱《 * AWS 命令列界面使用者指南*》中的使用 aws 設定[安裝](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html) 和快速組態。 [https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html#cli-configure-quickstart-config](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html#cli-configure-quickstart-config)安裝在 AWS CloudShell 中的 AWS CLI 版本也可能是最新版本後面的幾個版本。若要更新它，請參閱《CloudShell [AWS 使用者指南》中的將 CLI 安裝到您的主目錄](https://docs.aws.amazon.com/cloudshell/latest/userguide/vm-specs.html#install-cli-software)。 * AWS CloudShell *
+ 如果您希望節點透過 Amazon 網路推送容器映像到私有 Amazon ECR 儲存庫，或從中提取容器映像，則需使用適用於 Amazon ECR 的介面 VPC 端點。如需詳細資訊，請參閱《Amazon 彈性容器登錄檔使用者指南》中的[建立適用於 Amazon ECR 的 VPC 端點](https://docs.aws.amazon.com/AmazonECR/latest/userguide/vpc-endpoints.html#ecr-setting-up-vpc-create)。

請完成以下步驟，以從某個儲存庫中提取容器映像，並將其推送到您的儲存庫。在本主題所提供的以下範例中，會提取適用於 [Kubernetes 專用 Amazon VPC CNI 外掛程式指標協助程式](https://github.com/aws/amazon-vpc-cni-k8s/blob/master/cmd/cni-metrics-helper/README.md)的映像。當您依照以下步驟操作時，請務必使用您的值取代 example values。

1. 如果您尚未擁有 Amazon ECR 儲存庫或其他儲存庫，請先建立您的節點可存取的儲存庫。以下命令會建立 Amazon ECR 私有儲存庫。Amazon ECR 私有儲存庫名稱必須以字母開頭。名稱僅能包含小寫字母、數字、連字號 (-)、底線 (\$1) 和正斜線 (/)。如需詳細資訊，請參閱《Amazon 彈性容器登錄檔使用者指南》中的[建立私有儲存庫](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html)。

   您可以使用所選的任何項目取代 *cni-metrics-helper*。最佳實務是為每個映像建立個別儲存庫。建議您採取此做法，因為映像標籤在儲存庫中必須是唯一的。使用 [Amazon ECR 支援的AWS 區域](https://docs.aws.amazon.com/general/latest/gr/ecr.html)取代 *region-code*。

   ```
   aws ecr create-repository --region region-code --repository-name cni-metrics-helper
   ```

1. 判定節點需要提取的映像的登錄檔、儲存庫和標籤 (選用)。此資訊採用 `registry/repository[:tag]` 格式。

   許多有關於安裝映像的 Amazon EKS 主題都要求您套用清單檔案檔案或使用 Helm Chart 來安裝映像。然而在套用清單檔案檔案或安裝 Helm Chart 之前，請檢視資訊清單的內容或圖表的 `values.yaml` 檔案。如此一來，您可以判定要提取的登錄檔、儲存庫和標籤。

   例如，您可在適用於 [Kubernetes 專用 Amazon VPC CNI 外掛程式指標協助程式](https://github.com/aws/amazon-vpc-cni-k8s/blob/master/cmd/cni-metrics-helper/README.md)的[資訊清單檔案](https://raw.githubusercontent.com/aws/amazon-vpc-cni-k8s/v1.12.6/config/master/cni-metrics-helper.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.12.6"
   ```

   您可能會看到如以下映像位置的變化：
   + 僅有 `repository-name:tag`。在此案例中，`docker.io` 通常是未經指定的登錄檔，因為在沒有指定登錄檔的情況下，依照預設 Kubernetes 會將其置於儲存庫名稱的前面。
   +  `repository-name/repository-namespace/repository:tag`。儲存庫命名空間為選用，但有時會由儲存庫擁有者指定，以將映像分類。例如，[Amazon ECR Public Gallery 中的所有 Amazon EC2 映像](https://gallery.ecr.aws/aws-ec2/)都使用 `aws-ec2` 命名空間。

     在使用 Helm 安裝映像之前，請檢視 Helm `values.yaml` 檔案，以判定映像位置。例如，適用於 [Kubernetes 專用 Amazon VPC CNI 外掛程式指標協助程式](https://github.com/aws/amazon-vpc-cni-k8s/blob/master/cmd/cni-metrics-helper/README.md) [values.yaml](https://github.com/aws/amazon-vpc-cni-k8s/blob/master/charts/cni-metrics-helper/values.yaml#L5-L9) 檔案包含以下行。

     ```
     image:
       region: us-west-2
       tag: v1.12.6
       account: "602401143452"
       domain: "amazonaws.com"
     ```

1. 提取清單檔案檔案中指定的容器映像。

   1. 如果您要從公有登錄檔 (例如 [Amazon ECR 公共映像庫](https://gallery.ecr.aws/)) 進行提取，則可跳到下一個子步驟，因為不需要身分驗證。在此範例中，您將向包含 CNI 指標協助程式映像的儲存庫的 Amazon ECR 私有登錄檔進行身分驗證。Amazon EKS 會在[檢視 Amazon EKS 附加元件的 Amazon 容器映像登錄檔](add-ons-images.md)中列出的每個登錄檔中維護映像。您可使用不同登錄檔的資訊取代 *602401143452* 和 *region-code*，以對任何登錄檔進行身分驗證。每個[支援 Amazon EKS 的AWS 區域](https://docs.aws.amazon.com/general/latest/gr/eks.html#eks_region)中都有一個個別的登錄檔。

      ```
      aws ecr get-login-password --region region-code | docker login --username AWS --password-stdin 602401143452.dkr.ecr.region-code.amazonaws.com
      ```

   1. 提取映像。在此範例中，您將從上一個子步驟中所驗證的登錄表中提取。將 *602401143452* 和 *region-code* 取代為您在上一個子步驟中提供的資訊。

      ```
      docker pull 602401143452.dkr.ecr.region-code.amazonaws.com/cni-metrics-helper:v1.12.6
      ```

1. 標記與登錄檔、儲存庫和標籤一起提取的映像。以下範例假設您從清單檔案檔案中提取映像，並將其推送到您在第一個步驟中建立的 Amazon ECR 私有儲存庫。使用您的帳戶 ID 取代 *111122223333*。將 *region-code* 取代為您建立 Amazon ECR 私有儲存庫 AWS 的區域。

   ```
   docker tag cni-metrics-helper:v1.12.6 111122223333.dkr.ecr.region-code.amazonaws.com/cni-metrics-helper:v1.12.6
   ```

1. 對登錄檔進行身分驗證。在此範例中，您需對您在第一個步驟中建立的 Amazon ECR 私有登錄檔進行身分驗證。如需詳細資訊，請參閱《Amazon 彈性容器登錄檔使用者指南》中的[登錄檔身分驗證](https://docs.aws.amazon.com/AmazonECR/latest/userguide/Registries.html#registry_auth)。

   ```
   aws ecr get-login-password --region region-code | docker login --username AWS --password-stdin 111122223333.dkr.ecr.region-code.amazonaws.com
   ```

1. 將映像推送到您的儲存庫。在此範例中，您需將映像推送到您在第一個步驟中建立的 Amazon ECR 私有儲存庫。如需詳細資訊，請參閱《Amazon 彈性容器登錄檔使用者指南》中的[推送 Docker 映像](https://docs.aws.amazon.com/AmazonECR/latest/userguide/docker-push-ecr-image.html)。

   ```
   docker push 111122223333.dkr.ecr.region-code.amazonaws.com/cni-metrics-helper:v1.12.6
   ```

1. 針對您所推送的映像，使用 `registry/repository:tag` 更新您在先前步驟中用於確定映像的清單檔案檔案。如果您是使用 Helm Chart 進行安裝，則通常會出現一個可供指定 `registry/repository:tag` 的選項。安裝圖表時，請為推送到儲存庫的映像指定 `registry/repository:tag`。