あるリポジトリから別のリポジトリにコンテナイメージをコピーする - Amazon EKS

あるリポジトリから別のリポジトリにコンテナイメージをコピーする

このトピックでは、ノードがアクセスできないリポジトリからコンテナイメージをプルし、ノードがアクセスできるリポジトリにイメージをプッシュする方法について説明します。イメージを、Amazon ECR またはノードがアクセスできる代替リポジトリにプッシュできます。

前提条件
  • コンピューターにインストールおよび設定された Docker エンジン。詳細については、Docker ドキュメントの「Docker エンジンのインストール」を参照してください。

  • ご使用のデバイスまたは AWS CloudShell で、バージョン 2.12.3 以降、または AWS Command Line Interface (AWS CLI) のバージョン 1.27.160 以降がインストールおよび設定されていること。現在のバージョンを確認するには、「aws --version | cut -d / -f2 | cut -d ' ' -f1」を参照してください。macOS の yumapt-get、または Homebrew などのパッケージマネージャは、AWS CLI の最新バージョンより数バージョン遅れることがあります。最新バージョンをインストールするには、「AWS Command Line Interface ユーザーガイド」の「AWS CLI のインストール、更新、およびアンインストール」と「aws configure でのクイック設定」を参照してください。AWS CloudShell にインストールされている AWS CLI バージョンは、最新バージョンより数バージョン遅れている可能性もあります。更新するには、「AWS CloudShellユーザーガイド」の「ホームディレクトリへの AWS CLI のインストール」を参照してください。

  • ノードでAmazon のネットワークを介してプライベート Amazon ECR リポジトリからコンテナイメージのプルを行ったり、コンテナイメージをプッシュする場合は、Amazon ECR のインターフェイス VPC エンドポイント。詳細については、Amazon Elastic コンテナレジストリ ユーザーガイドの 「Amazon ECR 用の VPC エンドポイントを作成する」を参照してください。

リポジトリからコンテナイメージをプルし、独自のリポジトリにプッシュする場合は、次の手順を完了してください。このトピックで紹介する次の例では、Amazon VPC CNI plugin for Kubernetes メトリクスヘルパー のイメージがプルされます。これらのステップを実行する場合は、必ず example values をユーザー自身の値に置き換えてください。

あるリポジトリから別のリポジトリにコンテナイメージをコピーする
  1. Amazon ECR リポジトリまたは別のリポジトリがまだ作成されていない場合は、ノードがアクセスできるリポジトリを作成します。次のコマンドは、Amazon ECR プライベートリポジトリを作成します。Amazon ECR プライベートリポジトリ名は文字で始まる必要があります。小文字、数字、ハイフン (-)、アンダースコア (_)、フォワードスラッシュ (/) のみ含むことができます。詳細については、Amazon Elastic Container Registry ユーザーガイドの「プライベートリポジトリの作成」を参照してください。

    cni-metrics-helper は、ユーザーが任意で選択する名前に置き換えることができます。ベストプラクティスとして、各イメージに個別のリポジトリを作成します。イメージタグはリポジトリ内で一意である必要があるため、この方法をお勧めします。region-codeAmazon ECR でサポートされている AWS リージョン に置き換えます。

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

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

    例えば、Amazon VPC CNI plugin for Kubernetes メトリクスヘルパーマニフェストファイルに次の行があります。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 イメージは、aws-ec2 名前空間を使用します。

    Helm を使用してイメージをインストールする前に、Helm values.yaml ファイルを表示してイメージの場所を決定します。例えば、Amazon VPC CNI plugin for Kubernetes メトリクスヘルパーvalues.yaml ファイルには次の行が含まれています。

    image: region: us-west-2 tag: v1.12.6 account: "602401143452" domain: "amazonaws.com"
  3. マニフェストファイルで指定されたコンテナイメージをプルします。

    1. Amazon ECR Public Gallery など、パブリックレジストリからプルする場合は、認証が不要なため、次のサブステップにスキップします。この例では、CNI メトリクスヘルパーイメージのリポジトリを含む Amazon ECR プライベートレジストリに対して認証します。Amazon EKS は、Amazon コンテナイメージレジストリ に記載されている各レジストリにイメージを保持します。602401143452region-code を別のレジストリの情報に置き換えることで、任意のレジストリに対して認証が可能です。Amazon EKS がサポートされている AWS リージョン には、それぞれに個別のレジストリが存在します。

      aws ecr get-login-password --region region-code | docker login --username AWS --password-stdin 602401143452.dkr.ecr.region-code.amazonaws.com
    2. イメージをプルする。この例では、前のサブステップで認証したレジストリからプルします。602401143452region-code を前のサブステップで指定した情報に置き換えます。

      docker pull 602401143452.dkr.ecr.region-code.amazonaws.com/cni-metrics-helper:v1.12.6
  4. プルしたイメージに、レジストリ、リポジトリ、タグでタグ付けします。次の例では、マニフェストファイルからイメージをプルし、最初のステップで作成した 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
  5. レジストリに対して認証します。この例では、最初のステップで作成した Amazon ECR プライベートレジストリに対して認証します。詳細については、Amazon Elastic Container Registry ユーザーガイドの「レジストリの認証」を参照してください。

    aws ecr get-login-password --region region-code | docker login --username AWS --password-stdin 111122223333.dkr.ecr.region-code.amazonaws.com
  6. リポジトリにプッシュするイメージを付けます。この例では、最初のステップで作成した Amazon ECR プライベートリポジトリにイメージをプッシュします。詳細については、「Amazon Elastic Container Registry ユーザーガイド」の「Docker イメージのプッシュ」を参照してください。

    docker push 111122223333.dkr.ecr.region-code.amazonaws.com/cni-metrics-helper:v1.12.6
  7. プッシュしたイメージ用の registry/repository:tag を使用して前のステップでイメージの決定に使用したマニフェストファイルを更新します。Helm チャートを使用してインストールする場合、registry/repository:tag を指定するオプションが多くあります。チャートをインストールする場合、リポジトリにプッシュしたイメージの registry/repository:tag を指定します。