Copia imágenes entre repositorios

Puedes usar la herramienta gcrane para copiar imágenes de un repositorio de Docker a otro Artifact Registry.

También puedes usar la herramienta para copiar imágenes de Container Registry a Artifact Registry.

Antes de comenzar

Verifica los siguientes requisitos:

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

  2. Tienes los permisos necesarios:

    • Lector de Artifact Registry (roles/storage.objectViewer) o un rol con permisos equivalentes para el repositorio desde el que copias.

    • Escritor de Artifact Registry (roles/artifactregistry.writer) o un rol con permisos equivalentes para el repositorio de destino.

Descripción general

La herramienta gcrane simplifica la copia en repositorios compatibles con lo siguiente:

  • Copiar conjuntos de imágenes con un solo comando, incluidas todas las imágenes de un la ruta de acceso específica o todas las imágenes almacenadas en el host multirregional de tu proyecto.
  • Se omiten las capas de imagen que ya se cargaron.

Cómo quitar imágenes que no se usan

Quitar las imágenes que no uses antes de realizar una operación de copia puede ayudarte a reducir los costos de almacenamiento.

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.

Configura gcrane

Puedes ejecutar gcrane desde los siguientes 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 para la VM de Compute Engine. Si la instancia de VM se encuentra en una ubicación diferente a la al repositorio de código fuente, podrían aplicarse cargos de salida de red las imágenes que copias.

  • Cloud Shell: Una opción para copiar conjuntos pequeños de 40 GB o menos. Dado que la herramienta gcrane omite la carga de capas de imagen que ya están este límite es para los datos nuevos que copias.

    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: Si la instancia de Cloud Shell se encuentra en una ubicación diferente. que el repositorio de origen, podrían aplicarse cargos de salida de red las imágenes que copias. 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
    

Recomendamos usar la versión más reciente de la herramienta gcrane para aprovechar de todas las funciones y mejoras disponibles. Las instrucciones de configuración en la las siguientes secciones incluyen los pasos para descargar la versión más reciente.

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

gcrane version

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:

Identifica las imágenes que deseas copiar

Después de instalar la herramienta gcrane, puedes enumerar las imágenes existentes en en el repositorio de código fuente para encontrar los que quieres copiar.

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

gcrane ls LOCATION-docker.pkg.dev/PROJECT/REPOSITORY

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

gcrane ls LOCATION-docker.pkg.dev/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-docker.pkg.dev/PROJECT/PATH

Para cada uno de los comandos, haz lo siguiente:

  • Reemplaza LOCATION por la ubicación del repositorio.
  • Reemplaza PROJECT por el ID del proyecto.
  • Reemplaza PATH por la ruta de acceso que deseas copiar.

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

Copia imágenes

Puedes copiar imágenes individuales o conjuntos de imágenes con el comando gcrane cp.

Para copiar una sola imagen, ejecuta el siguiente comando:

gcrane cp LOCATION1-docker.pkg.dev/PROJECT1/REPOSITORY1/IMAGE1 \
LOCATION2-docker.pkg.dev/PROJECT2/REPOSITORY2/IMAGE2

Para copiar imágenes de manera recurrente en una ruta específica de un repositorio, ejecuta el comando:

gcrane cp -r LOCATION1-docker.pkg.dev/PROJECT1/REPOSITORY1/IMAGE1/PATH1 \
LOCATION2-docker.pkg.dev/PROJECT2/REPOSITORY2/IMAGE2/PATH2

Para copiar todas las imágenes de un repositorio, ejecuta el comando:

gcrane cp -r LOCATION1-docker.pkg.dev/PROJECT1/REPOSITORY1 \
LOCATION2-docker.pkg.dev/PROJECT2/REPOSITORY2

Reemplaza los siguientes valores:

  • LOCATION1 es la ubicación del repositorio de código fuente.
  • LOCATION2 es la ubicación del repositorio de destino.
  • PROJECT1 es el ID del proyecto de Google Cloud asociado con la en un repositorio de código fuente.
  • PROJECT2 es el ID del proyecto de Google Cloud asociado con la en un repositorio de destino.
  • REPOSITORY1 es el nombre del repositorio de código fuente.
  • REPOSITORY2 es el nombre del repositorio de destino.
  • IMAGE1 es la imagen que deseas copiar.
  • IMAGE2 es el nombre de la imagen en el repositorio de destino.

Ejemplos

El siguiente comando copia my-image:tag1 del repositorio repo1. al repositorio repo2 dentro del mismo proyecto y la misma región.

gcrane cp us-west1-docker.pkg.dev/my-project/repo1/my-image:tag1 \
us-west1-docker.pkg.dev/my-project/repo2/my-image:tag1

El siguiente comando copia de manera recurrente todas las imágenes de test-images/testing del repositorio repo1 a la misma ruta en el repositorio repo2.

gcrane cp -r us-west1-docker.pkg.dev/my-project/repo1/test-images/testing \
us-west1-docker.pkg.dev/my-project/repo2/test-images/testing

El siguiente comando copia todas las imágenes del repositorio my-repo en la proyecto dev-project al repositorio my-repo en otro proyecto llamada prod-project.

gcrane cp -r us-west1-docker.pkg.dev/dev-project/my-repo \
us-west1-docker.pkg.dev/prod-project/my-repo