

 **このページの改善にご協力ください** 

このユーザーガイドに貢献するには、すべてのページの右側のペインにある「**GitHub でこのページを編集する**」リンクを選択してください。

# あるリポジトリから別のリポジトリにコンテナイメージをコピーする
<a name="copy-image-to-repository"></a>

このトピックでは、ノードがアクセスできないリポジトリからコンテナイメージをプルし、ノードがアクセスできるリポジトリにイメージをプッシュする方法について説明します。イメージを、Amazon ECR またはノードがアクセスできる代替リポジトリにプッシュできます。
+ コンピュータにインストールされ設定されている Docker エンジン。手順については、Docker ドキュメントの[「Docker Engine のインストール」](https://docs.docker.com/engine/install/)を参照してください。
+ ご使用のデバイスまたは AWS クラウドシェル で、バージョン `2.12.3` 以降、または AWS コマンドラインインターフェイス (AWS CLI のバージョン `1.27.160` 以降がインストールおよび設定されていること。現在のバージョンを確認するには「`aws --version | cut -d / -f2 | cut -d ' ' -f1`」を参照してください。`yum`、`apt-get`、macOS 用の Homebrew などのパッケージマネージャーは、多くの場合 AWS CLI の最新バージョンより数バージョン古くなっています。最新バージョンをインストールするには「*AWS コマンドラインインターフェイスユーザーガイド*」の「[インストール](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html)」および「[aws configure を使用したクイック設定](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html#cli-configure-quickstart-config)」を参照してください。AWS クラウドシェル にインストールされている AWS CLI バージョンも最新バージョンより数バージョン遅れることがあります。更新するには、「*AWS CloudShell ユーザーガイド*」の「[ホームディレクトリへの AWS CLI のインストール](https://docs.aws.amazon.com/cloudshell/latest/userguide/vm-specs.html#install-cli-software)」を参照してください。
+ ノードで Amazon のネットワークを介してプライベート Amazon ECR リポジトリからコンテナイメージのプルを行ったり、コンテナイメージをプッシュする場合は、Amazon ECR のインターフェイス VPC エンドポイント。詳細については、Amazon Elastic コンテナレジストリ ユーザーガイドの [「Amazon ECR 用の VPC エンドポイントを作成する」](https://docs.aws.amazon.com/AmazonECR/latest/userguide/vpc-endpoints.html#ecr-setting-up-vpc-create)を参照してください。

リポジトリからコンテナイメージをプルし、独自のリポジトリにプッシュする場合は、次の手順を完了してください。このトピックで紹介する次の例では、[Amazon VPC CNI Plugin for Kubernetes メトリクスヘルパー](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 Elastic Container Registry ユーザーガイドの[「プライベートリポジトリの作成」](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-create.html)を参照してください。

   *cni-metrics-helper* を選択したものに置き換えることができます。ベストプラクティスとして、各イメージに個別のリポジトリを作成します。イメージタグはリポジトリ内で一意である必要があるため、この方法をお勧めします。*region-code* を [Amazon ECR でサポートされている AWS リージョン](https://docs.aws.amazon.com/general/latest/gr/ecr.html)に置き換えます。

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

1. ノードがプルする必要があるイメージのレジストリ、リポジトリ、およびタグ (オプション) を決めます。この情報は `registry/repository[:tag]` 形式です。

   Amazon EKS のイメージのインストールに関するトピックの多くは、マニフェストファイルを適用するか、Helm チャートを使用してイメージをインストールする必要があります。ただし、マニフェストファイルの適用や、Helm チャートをインストールする前に、まずマニフェストやチャートの `values.yaml` ファイルの内容を確認してください そうすることで、プルするレジストリ、リポジトリ、およびタグを決定することができます。

   例えば、[Amazon VPC CNI plugin for Kubernetes メトリクスヘルパー](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` ファイルを表示してイメージの場所を決定します。例えば、[Amazon VPC CNI plugin for Kubernetes メトリクスヘルパー](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 Public Gallery](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 プライベートリポジトリにイメージをプッシュすることを前提としています。*111122223333* は、ご自分のアカウント ID に置き換えます。*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 Elastic Container Registry ユーザーガイドの[「レジストリの認証」](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 Elastic Container Registry ユーザーガイドの[「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 チャートを使用してインストールする場合、`registry/repository:tag` を指定するオプションが多くあります。チャートをインストールする場合、リポジトリにプッシュしたイメージの `registry/repository:tag` を指定します。