Copia imágenes desde Container Registry

Como parte de la transición de Container Registry a Artifact Registry, puedes copiar las imágenes de Container Registry que quieres conservar Artifact Registry.

Descripción general

Existen varias opciones para copiar imágenes de Container Registry a Artifact Registry. Recomendamos copiar las imágenes con la herramienta de migración automática admite la copia de varios proyectos, puede copiar tus imágenes incluso si ya redireccionamiento habilitado y puede manejar una mayor cantidad de imágenes que otras . Si no tienes más de 10,000 imágenes y aún no las habilitaste redireccionamiento, puedes usar la herramienta gcrane que también permite copiar conjuntos de imágenes con un solo comando.

Para reducir costos, haz lo siguiente:

  1. Quita las imágenes antiguas y sin etiquetar antes de copiar los contenedores en Artifact Registry.

  2. Si copias imágenes a un Artifact Registry estándar (pkg.dev) un repositorio, luego inhabilitar el análisis automático para Artifact Registry antes de copiar imágenes para evitar que se dupliquen análisis de costos. Puedes volver a habilitar el análisis automático después de copiar todos tus imágenes de contenedores.

    Si copias imágenes a un repositorio gcr.io de Artifact Registry no debes inhabilitar el análisis automático.

    Para más información sobre el control de costos relacionados con el análisis de vulnerabilidades, ver Controla los costos del análisis de vulnerabilidades.

Quitar imágenes sin etiquetar de Container Registry

Quitar las imágenes sin etiquetar reduce el costo del almacenamiento en Container Registry y el costo del copiado de imágenes de Container Registry a Artifact Registry.

Hay varias herramientas disponibles para identificar y automatizar la eliminación imágenes que ya no necesitas. Por ejemplo, el gcr-cleaner te ayuda a encontrar y quitar imágenes antiguas según diferentes criterios. La herramienta gcr-cleaner no es un producto oficial de Google.

Para obtener más información sobre la configuración y el uso de la herramienta, consulta la gcr-cleaner en la documentación de Google Cloud.

Copia imágenes con la herramienta de migración automática (recomendado)

Usa la herramienta de migración automática para realizar la transición de Container Registry a Repositorios de gcr.io en Artifact Registry o en Artifact Registry estándar o para copiar tus imágenes de Container Registry a Artifact Registry.

Esta herramienta solo admite la migración y el copiado a la misma multirregión.

Sigue las instrucciones que se indican en Migra automáticamente a Artifact Registry para copiar tus imágenes de Container Registry a Artifact Registry.

Copia imágenes mediante gcrane

Para copiar imágenes en Artifact Registry, también puedes usar la gcrane.

gcrane permite copiar imágenes entre varias regiones, pero tiene lo siguiente: desventajas:

  • gcrane es más lenta que las herramientas automatizadas.
  • gcrane está limitado por la cuota de Container Registry.
  • gcrane puede fallar si alguna imagen tiene más de 10,000 versiones o etiquetas.
  • gcrane puede fallar si alguna imagen está mal configurada o si faltan datos.

Requisitos

Verifica los siguientes requisitos:

  1. Debes haber habilitado Artifact Registry en la fuente y proyectos de Google Cloud de destino.

  2. Creaste un repositorio de Docker en Artifact Registry para las imágenes que copias.

  3. Tienes los permisos necesarios:

  4. Para usar la opción de copia rápida, verifica los siguientes requisitos:

    • Debes usar la versión 0.10.0 de gcrane o una posterior. Las instrucciones de configuración de gcrane en esta documentación incluyen pasos para descarga la última versión.

      Para verificar la versión de una instalación de gcrane existente, ejecuta el siguiente comando:

      gcrane version
      
    • El agente de servicio de Artifact Registry del proyecto de destino debe tener la Visualizador de objetos de Storage (roles/storage.objectViewer) o un rol con permisos equivalentes en el proyecto de origen. Ejecuta el siguiente comando para Otorga el rol de visualizador de objetos de Storage al agente de servicio:

      gcloud projects add-iam-policy-binding SOURCE_PROJECT_ID \
          --member='serviceAccount:service-DEST_PROJECT_NUMBER@gcp-sa-artifactregistry.iam.gserviceaccount.com' \
          --role='roles/storage.objectViewer'
      

      Reemplaza SOURCE_PROJECT_ID por el ID (p. ej., “my-project”) de Google Cloud proyecto con los hosts de Container Registry.

      Reemplaza DEST_PROJECT_NUMBER por el número (p. ej., 12345) del proyecto de Google Cloud con tu repositorio de Artifact Registry.

Opciones y costos del entorno

Puedes ejecutar gcrane desde varios entornos:

  • Instancia de Compute Engine: Usa esta opción si tienes una mayor cantidad de contenedores que deseas copiar.

    Costos:

    • Tiempo de actividad de la instancia la VM de Compute Engine.
    • Transferencia de datos de red para las imágenes que copies, a menos que uses la opción de copia rápida. Para minimizar costos:
    • Usa una instancia de VM en la misma ubicación que Container Registry bucket de almacenamiento.
    • Para minimizar el costo y maximizar la velocidad de copiado, usa Artifact Registry en la misma multirregión que Container Registry. Transferencia de datos dentro de una misma multirregión no genera cargos y es mucho más rápido que copiar entre ubicaciones.
  • Cloud Shell: Una opción para copiar conjuntos pequeños de 40 GB o menos. Como gcrane omite la carga de capas de imagen que ya se hayan subido, este límite es para los datos nuevos que quieres copiar.

    La copia de repositorios más grandes puede hacer que Cloud Shell se desconecte después de que transcurra un tiempo de espera de solicitud de 10 minutos.

    Costos: Transferencia de datos de red para las imágenes que copias, a menos que con la opción de copia rápida.

    • No puedes elegir la ubicación de una instancia de Cloud Shell sesión. Para verificar la ubicación de la sesión actual, ejecuta el siguiente comando:
    curl metadata/computeMetadata/v1/instance/zone
    
    • Para minimizar el costo y maximizar la velocidad de copiado, usa Artifact Registry en la misma multirregión que Container Registry. Transferencia de datos dentro de una misma multirregión no genera cargos y es mucho más rápido que copiar entre ubicaciones.
  • Máquina local: Si no puedes usar las demás opciones, puedes ejecutar gcrane desde una máquina local.

    Costos: Transferencia de datos de red para las imágenes que copias, a menos que con la opción de copia rápida

    Para minimizar el costo y maximizar la velocidad de copiado, usa Artifact Registry en la misma multirregión que Container Registry. Transferencia de datos dentro de en una misma multirregión no genera cargos y es mucho más rápida que copiar en todas las ubicaciones.

Configura Compute Engine

Para copiar imágenes mediante gcrane desde una instancia de VM de Compute Engine, haz lo siguiente:

  1. Crea una instancia de VM. Para minimizar los costos, crea la instancia en la misma ubicación que la del que estás copiando.
  2. De forma predeterminada, la instancia de VM se asocia con el cuenta de servicio predeterminada y tiene permisos para extraer imágenes. Debes cambiar el permiso de acceso para que la instancia de VM puede enviar imágenes.

    1. Detén la instancia de VM. Consulta Detén una instancia.

    2. Cambia el permiso de acceso mediante el siguiente comando.

      gcloud compute instances set-service-account INSTANCE --scopes=storage-rw
      

      Reemplaza INSTANCE con el nombre de la instancia de VM.

    3. Reinicia la instancia de VM. Consulta Inicia una instancia detenida.

  3. Conéctate a la VM con SSH.

  4. Ejecuta el siguiente comando para descargar gcrane.

    curl -L \
    https://github.com/google/go-containerregistry/releases/latest/download/go-containerregistry_Linux_x86_64.tar.gz \
    -o go-containerregistry.tar.gz
    
  5. Ejecuta los siguientes comandos para hacer que el comando gcrane sea ejecutable.

    tar -zxvf go-containerregistry.tar.gz
    chmod +x gcrane
    sudo mv gcrane /usr/local/bin/
    
  6. Ejecuta el comando gcrane --help para verificar la instalación.

Ya estás preparado para copiar imágenes. Para continuar, haz lo siguiente:

Configura Cloud Shell

  1. Abre una ventana de Cloud Shell.

    Abra Cloud Shell

  2. Configura el proyecto predeterminado. Reemplaza PROJECT por el ID del proyecto en el que están instalados Container Registry y Artifact Registry.

    gcloud config set project PROJECT
    
  3. Ejecuta el siguiente comando para descargar la herramienta de gcrane.

    curl -L \
    https://github.com/google/go-containerregistry/releases/latest/download/go-containerregistry_Linux_x86_64.tar.gz \
    -o go-containerregistry.tar.gz
    
  4. Ejecuta los siguientes comandos para hacer que el comando gcrane sea ejecutable.

    tar -zxvf go-containerregistry.tar.gz
    chmod +x gcrane
    sudo mv gcrane /usr/local/bin/
    
  5. Ejecuta el comando gcrane --help para verificar la instalación.

Ya estás preparado para copiar imágenes. Para continuar, haz lo siguiente:

Configura una máquina local

  1. Descarga gcrane del repositorio de GitHub. Por ejemplo, el siguiente comando descarga la distribución de Linux x86-64 desde la línea de comandos.

    curl -L \
    https://github.com/google/go-containerregistry/releases/latest/download/go-containerregistry_Linux_x86_64.tar.gz \
    -o go-containerregistry.tar.gz
    
  2. Ejecuta los siguientes comandos para hacer que el comando gcrane sea ejecutable. El comandos suponen que el archivo descargado se llama go-containerregistry.tar.gz.

    tar -zxvf go-containerregistry.tar.gz
    chmod +x gcrane
    sudo mv gcrane /usr/local/bin/
    
  3. Ejecuta el comando gcrane --help para verificar la instalación.

Ya estás preparado para copiar imágenes. Para continuar, haz lo siguiente:

Identificar las imágenes que deseas copiar

Después de haber instalado gcrane, puedes enumerar las imágenes existentes en Container Registry para buscar las que deseas copiar.

Para enumerar las imágenes existentes, ejecuta el siguiente comando:

gcrane ls LOCATION.gcr.io/PROJECT

Para enumerar las etiquetas que tiene una imagen, ejecuta el siguiente comando:

gcrane ls LOCATION.gcr.io/PROJECT/IMAGE

Para enumerar las imágenes en una ruta de acceso específica de manera recursiva, ejecuta el comando siguiente:

gcrane ls -r LOCATION.gcr.io/PROJECT/PATH

Para cada uno de los comandos, haz lo siguiente:

  • Reemplaza LOCATION por la multirregión del registro: asia, eu o us.
  • Reemplaza PROJECT por el ID del proyecto.

Consulta Copia imágenes a fin de ver los comandos necesarios para copiar tus imágenes.

Copia imágenes

Puedes copiar imágenes individuales de Container Registry, todas las imágenes de una ruta específica en una ubicación o todas las imágenes almacenadas en una ubicación.

Copia una sola imagen

Para copiar una sola imagen etiquetada, ejecuta el siguiente comando:

gcrane cp GCR-LOCATION.gcr.io/PROJECT/IMAGE \
AR-LOCATION.pkg.dev/PROJECT/REPOSITORY/IMAGE

Donde

  • GCR-LOCATION es la multirregión del host de Container Registry: asia, eu o us.
  • AR-LOCATION es la región o multirregión del repositorio.
  • PROJECT es el ID del proyecto.
  • REPOSITORY es el nombre del repositorio de Artifact Registry.
  • GCR-IMAGE es la imagen desde la que quieres copiar. Container Registry.
  • AR-IMAGE es el nombre de la imagen en Artifact Registry.

Por ejemplo, considera la siguiente imagen de origen y destino:

  • Imagen de Container Registry: eu.gcr.io/my-project/my-image:tag1
  • Imagen de Artifact Registry: europe-docker.pkg.dev/my-project/my-repo/my-image:tag1

Ejecuta el siguiente comando para copiar la imagen:

gcrane cp eu.gcr.io/my-project/my-image:tag1 \
europe-docker.pkg.dev/my-project/my-repo/my-image:tag1

Copia todas las imágenes en una ruta de acceso

Para copiar imágenes en una ruta específica de Container Registry de manera recursiva, ejecuta el siguiente comando:

gcrane cp -r GCR-LOCATION.gcr.io/PROJECT/GCR-PATH \
AR-LOCATION.pkg.dev/PROJECT/REPOSITORY/AR-PATH

Donde

  • GCR-LOCATION es la multirregión del host de Container Registry: asia, eu o us.
  • AR-LOCATION es la región o multirregión del repositorio.
  • PROJECT es el ID del proyecto.
  • REPOSITORY es el nombre del repositorio de Artifact Registry.
  • GCR-PATH es la ruta de los archivos que quieres copiar.
  • AR-PATH es la ruta de las imágenes en tu repositorio de Artifact Registry.

Por ejemplo, considera las siguientes rutas de origen y destino:

  • Ruta de acceso de Container Registry: eu.gcr.io/my-project/test-images/testing
  • Ruta de acceso de Artifact Registry: europe-docker.pkg.dev/my-project/my-repo/test-images/testing

Mediante el siguiente comando, se copian de forma recursiva todas las imágenes de test-images/testing al repositorio my-repo:

gcrane cp -r eu.gcr.io/my-project/test-images/testing \
europe-docker.pkg.dev/my-project/my-repo/test-images/testing

Copia todas las imágenes de una ubicación de Container Registry

Para copiar todas las imágenes de una multirregión de Container Registry, ejecuta el comando:

gcrane cp -r GCR-LOCATION.gcr.io/PROJECT \
AR-LOCATION.pkg.dev/PROJECT/REPOSITORY

Donde

  • GCR-LOCATION es la multirregión del host de Container Registry: asia, eu o us.
  • AR-LOCATION es la región o multirregión del repositorio.
  • PROJECT es el ID del proyecto.
  • REPOSITORY es el nombre del repositorio de Artifact Registry.

Si quieres copiar imágenes para más de una ubicación de Container Registry en tu proyecto, ejecuta el comando una vez para cada host.

Por ejemplo, considera el siguiente registro de origen y destino a Artifact Registry. en un repositorio de confianza. En este ejemplo, Container Registry y Artifact Registry son en proyectos diferentes.

  • Host de Container Registry: eu.gcr.io/my-project
  • Imagen de Artifact Registry: europe-docker.pkg.dev/new-project/my-repo

Mediante el siguiente comando, se copian todas las imágenes de la multirregión eu del proyecto my-project al repositorio my-repo del proyecto new-project.

gcrane cp -r eu.gcr.io/my-project \
europe-docker.pkg.dev/new-project/my-repo

Copia imágenes mediante Docker

A diferencia de los métodos de copiado de gcrane y gcloud, este enfoque es un proceso de dos pasos.

  1. Extrae una imagen de Container Registry.
  2. Envía la imagen a tu repositorio de Artifact Registry.

Requisitos

Verifica los siguientes requisitos:

  1. Creaste un repositorio de Docker en Artifact Registry para las imágenes que copias.

  2. Tienes los permisos necesarios:

  3. Configuraste Docker para que se autentique en ambos Container Registry y Artifact Registry.

Costos

Cuando extraes una imagen, se te factura por la transferencia de datos de red. Los precios específicos dependen del destino de tu comando de extracción. Por ejemplo, si extraes una imagen de una sesión de Cloud Shell, es para la transferencia de datos de red dentro de Google Cloud. Si extraes una imagen a una máquina fuera de Google Cloud precios para la transferencia general de datos de red.

Los comandos de Docker que usas para etiquetar, enviar y extraer imágenes Artifact Registry son similares a las que usas en Container Registry. Existen dos diferencias clave:

  • El nombre de host para los repositorios de Docker de Artifact Registry incluye una ubicación seguido de -docker.pkg.dev. Los ejemplos incluyen australia-southeast1-docker.pkg.dev, europe-north1-docker.pkg.dev, y europe-docker.pkg.dev.
  • Debido a que Artifact Registry admite varios repositorios de Docker en un solo debes especificar el nombre del repositorio en los comandos.

Para copiar una imagen en Artifact Registry mediante Docker, extrae la imagen de Container Registry y, luego, envíala a tu repositorio de Artifact Registry.

Por ejemplo, considera una imagen de Container Registry en la multirregión eu. y que quieres copiar en un repositorio de Artifact Registry en europe región.

  • Imagen de Container Registry: eu.gcr.io/my-project/my-image:tag1
  • Imagen de Artifact Registry: europe-docker.pkg.dev/my-project/my-repo/my-image:tag1

Mediante el siguiente comando, se extrae la imagen de Container Registry.

docker pull eu.gcr.io/my-project/my-image:tag1

El siguiente comando envía la imagen al repositorio de Artifact Registry con el nombre my-repo.

docker push europe-north1-docker.pkg.dev/my-project/my-repo/my-image

También puedes enviar imágenes a un repositorio de Artifact Registry configurar en un proyecto diferente. Este ejemplo envía la misma imagen de origen a el repositorio my-repo en el proyecto new-project

docker push europe-north1-docker.pkg.dev/new-project/my-repo/my-image

Para obtener información sobre cómo enviar y extraer imágenes Artifact Registry, consulta Envía y extrae imágenes.

Copia imágenes mediante gcloud

Usa el comando gcloud container images add-tag para copiar una imagen de Container Registry en tu repositorio de Artifact Registry.

Requisitos

Verifica los siguientes requisitos:

  1. Creaste un repositorio de Docker en Artifact Registry para las imágenes que copias.

  2. Tienes los permisos necesarios:

Costos

Si Container Registry se encuentra en una ubicación diferente a la de tu repositorio de Artifact Registry cargos por transferencia de datos de red solicitar imágenes que copies. Si ambos servicios se encuentran en la misma ubicación, la red la transferencia de datos es gratuita.

Ejecuta el siguiente comando para copiar una imagen de Container Registry a Artifact Registry:

gcloud container images add-tag GCR-IMAGE AR-IMAGE

Donde

  • GCR-IMAGE es la ruta de acceso completa a la imagen de Container Registry.
  • AR-IMAGE es la ruta completa de la imagen en el repositorio de Artifact Registry.

Por ejemplo, considera las siguientes imágenes de origen y destino:

  • Imagen de Container Registry: eu.gcr.io/my-project/my-image:tag1
  • Imagen de Artifact Registry: europe-docker.pkg.dev/my-project/my-repo/my-image:tag1

Este comando copia la imagen de Container Registry en la multirregión eu al repositorio my-repo en la europe multirregional.

gcloud container images add-tag eu.gcr.io/my-project/my-image:tag1 \
europe-docker.pkg.dev/my-project/my-repo/my-image:tag1

También puedes copiar imágenes a un repositorio de Artifact Registry que configurar en un proyecto diferente. En este ejemplo, se copia la misma imagen de origen en el repositorio my-repo en el proyecto new-project

gcloud container images add-tag eu.gcr.io/my-project/my-image:tag1 \
europe-docker.pkg.dev/new-project/my-repo/my-image:tag1

¿Qué sigue?