Copiar una imagen de contenedor de un repositorio en otro repositorio - Amazon EKS

Copiar una imagen de contenedor de un repositorio en otro repositorio

En este tema se describe cómo extraer una imagen de contenedor de un repositorio al que los nodos no tienen acceso y enviar la imagen a un repositorio al que tienen acceso los nodos. Puede enviar la imagen a Amazon ECR o a un repositorio alternativo al que tengan acceso sus nodos.

Requisitos previos
  • El motor de Docker instalado y configurado en su equipo. Para ver instrucciones, consulte Instalar motor de Docker en la documentación de Docker.

  • La versión 2.12.3 o posterior, o bien, la versión 1.27.160 o posterior de la AWS Command Line Interface (AWS CLI) instalada y configurada en su dispositivo o AWS CloudShell. Para comprobar su versión actual, utilice aws --version | cut -d / -f2 | cut -d ' ' -f1. Los administradores de paquetes tales como yum, apt-get o Homebrew para macOS suelen estar atrasados varias versiones respecto de la versión de la AWS CLI más reciente. Para instalar la versión más reciente, consulte Instalar, actualizar y desinstalar la AWS CLI y Configuración rápida con aws configure en la Guía del usuario de AWS Command Line Interface. La versión de AWS CLI instalada en AWS CloudShell también puede estar atrasada varias versiones respecto de la versión más reciente. Para actualizarla, consulte Instalación de la AWS CLI en el directorio de inicio en la Guía del usuario de AWS CloudShell.

  • Un punto de conexión de VPC de interfaz para Amazon ECR si desea que los nodos extraigan imágenes de contenedor o envíen imágenes de contenedor a un repositorio privado de Amazon ECR a través de la red de Amazon. Para obtener más información, consulte Crear los puntos de conexión de VPC para Amazon ECR en la Guía del usuario de Amazon Elastic Container Registry.

Siga los siguientes pasos para extraer una imagen de contenedor de un repositorio y enviarla a su propio repositorio. En los siguientes ejemplos que se proporcionan en este tema, se extrae la imagen del auxiliar de métricas Amazon VPC CNI plugin for Kubernetes. Cuando siga estos pasos, asegúrese de reemplazar los example values por sus propios valores.

Para copiar una imagen de contenedor de un repositorio a otro
  1. Si todavía no tiene un repositorio de Amazon ECR u otro repositorio, cree uno al que tengan acceso sus nodos. El siguiente comando crea un repositorio privado de Amazon ECR. El nombre de un repositorio privado de Amazon ECR debe comenzar por una letra. Solo puede contener letras minúsculas, números, guiones (-), guiones bajos (_) y barras inclinadas (/). Para obtener más información, consulte Creación de un repositorio privado en la Guía del usuario de Amazon Elastic Container Registry.

    Puede reemplazar cni-metrics-helper con lo que elija. Como práctica recomendada, cree un repositorio independiente para cada imagen. Recomendamos esto porque las etiquetas de imagen deben ser únicas dentro de un repositorio. Reemplace region-code por una Región de AWS compatible con Amazon ECR.

    aws ecr create-repository --region region-code --repository-name cni-metrics-helper
  2. Determine el registro, el repositorio y la etiqueta (opcional) de la imagen que deben extraer los nodos. Esta información se encuentra en el formato registry/repository[:tag].

    Muchos de los temas de Amazon EKS sobre la instalación de imágenes requieren aplicar un archivo de manifiesto o instalar la imagen mediante un gráfico de Helm. Sin embargo, antes de aplicar un archivo de manifiesto o instalar un gráfico de Helm, consulte primero el contenido del manifiesto o el archivo values.yaml del gráfico. Así podrá determinar el registro, el repositorio y la etiqueta que desea extraer.

    Por ejemplo, puede encontrar la siguiente línea en el archivo de manifiesto para el auxiliar de métricas Amazon VPC CNI plugin for Kubernetes. El registro es 602401143452.dkr.ecr.us-west-2.amazonaws.com, que es un registro privado de Amazon ECR. El repositorio es cni-metrics-helper.

    image: "602401143452.dkr.ecr.us-west-2.amazonaws.com/cni-metrics-helper:v1.12.6"

    Podría ver las siguientes variaciones para la ubicación de una imagen:

    • Solo repository-name:tag. En este caso, docker.io suele ser el registro, pero no se especifica ya que Kubernetes lo antepone a un nombre de repositorio de forma predeterminada si no se especifica ningún registro.

    • repository-name/repository-namespace/repository:tag. Es opcional definir un espacio de nombres para el repositorio, pero a veces lo especifica el propietario del repositorio para clasificar las imágenes. Por ejemplo, todas las imágenes de Amazon EC2 de la galería pública de Amazon ECR usan el espacio de nombres aws-ec2.

    Antes de instalar una imagen con Helm, consulte el archivo values.yaml de Helm para determinar la ubicación de la imagen. Por ejemplo, el archivo values.yaml para el auxiliar de métricas Amazon VPC CNI plugin for Kubernetes incluye las siguientes líneas.

    image: region: us-west-2 tag: v1.12.6 account: "602401143452" domain: "amazonaws.com"
  3. Extraiga la imagen del contenedor especificada en el archivo de manifiesto.

    1. Si la extracción es de un registro público, como la galería pública de Amazon ECR, puede pasar al siguiente subpaso porque no es necesaria la autenticación. En este ejemplo, se autentica en un registro privado de Amazon ECR que contiene el repositorio de la imagen auxiliar de métricas de CNI. Amazon EKS mantiene la imagen en cada registro que aparece en Registros de imágenes de contenedor de Amazon. Puede autenticarse en cualquiera de los registros reemplazando 602401143452 y region-code por la información de otro registro. Existe un registro independiente para cada Región de AWS compatible con Amazon EKS.

      aws ecr get-login-password --region region-code | docker login --username AWS --password-stdin 602401143452.dkr.ecr.region-code.amazonaws.com
    2. Extraiga la imagen. En este ejemplo, extrae del registro en el que se autenticó en el subpaso anterior. Reemplace 602401143452 y region-code con la información proporcionada en el subpaso anterior.

      docker pull 602401143452.dkr.ecr.region-code.amazonaws.com/cni-metrics-helper:v1.12.6
  4. Etiquete la imagen extraída con su registro, repositorio y etiqueta. En el siguiente ejemplo se supone que ha extraído la imagen del archivo de manifiesto y la va a enviar al repositorio privado de Amazon ECR que creó en el primer paso. Reemplace 111122223333 por su ID de cuenta. Reemplace region-code por su Región de AWS que creó en su repositorio privado de Amazon ECR.

    docker tag cni-metrics-helper:v1.12.6 111122223333.dkr.ecr.region-code.amazonaws.com/cni-metrics-helper:v1.12.6
  5. Realice la autenticación del registro. En este ejemplo, se autenticará en el registro privado de Amazon ECR que creó en el primer paso. Para obtener más información, consulte Autenticación de registros en la Guía del usuario de 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. Inserte la imagen en el repositorio. En este ejemplo, envía la imagen en el repositorio privado de Amazon ECR que creó en el primer paso. Para obtener más información, consulte Inserción de una imagen de Docker en la Guía del usuario de Amazon Elastic Container Registry.

    docker push 111122223333.dkr.ecr.region-code.amazonaws.com/cni-metrics-helper:v1.12.6
  7. Actualice el archivo de manifiesto que utilizó para determinar la imagen en un paso anterior con el registry/repository:tag para la imagen que envió. Si hace la instalación con un gráfico de Helm, a menudo hay una opción para especificar el registry/repository:tag. Al instalar el gráfico, especifique el registry/repository:tag para la imagen que envió a su repositorio.