Copiar imágenes entre repositorios

Puedes usar la herramienta gcrane para copiar imágenes entre repositorios de Docker en Artifact Registry.

Antes de empezar

Verifica los siguientes requisitos:

  1. Has creado el repositorio de Docker de destino en Artifact Registry para las imágenes que vas a copiar.

  2. Tienes los permisos necesarios:

    • Lector de Artifact Registry (roles/storage.objectViewer) o un rol con permisos equivalentes para el repositorio del que vas a copiar.

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

Información general

La herramienta gcrane simplifica la copia entre repositorios y es compatible con lo siguiente:

  • Copiar conjuntos de imágenes con un solo comando, incluidas todas las imágenes de una ruta especificada o todas las imágenes almacenadas en un host multirregional de tu proyecto.
  • Se omiten las capas de imagen que ya se han subido.

Eliminar imágenes que no se usan

Si eliminas las imágenes que no usas antes de realizar una operación de copia, puedes reducir los costes de almacenamiento.

Hay varias herramientas disponibles para identificar y automatizar la eliminación de imágenes que ya no necesites. Por ejemplo, la herramienta gcr-cleaner te ayuda a encontrar y eliminar 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 cómo configurar y usar la herramienta, consulta la documentación de gcr-cleaner.

Configurar gcrane

Puedes ejecutar gcrane en los siguientes entornos:

  • Instancia de Compute Engine: usa esta opción si tienes un gran número de contenedores que copiar.

    Costes: tiempo de actividad de la instancia de la VM de Compute Engine. Si la instancia de VM se encuentra en una ubicación distinta a la del repositorio de origen, es posible que se apliquen cargos de salida de red por las imágenes que copies.

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

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

gcrane version

Configurar Compute Engine

Para copiar imágenes con gcrane desde una instancia de VM de Compute Engine, sigue estos pasos:

  1. Crea una instancia de máquina virtual. Para minimizar los costes, crea la instancia en la misma ubicación que el registro del que vas a copiar.
  2. De forma predeterminada, la instancia de VM está asociada a la cuenta de servicio predeterminada y tiene permisos para extraer imágenes. Debes cambiar el alcance del acceso para que la instancia de VM pueda enviar imágenes.

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

    2. Cambia el alcance del acceso con el comando:

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

      Sustituye INSTANCE por el nombre de la instancia de VM.

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

  3. Conéctate a la instancia de VM mediante 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 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 puedes copiar imágenes. Para continuar:

Configurar 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 que el comando gcrane sea ejecutable. Los comandos asumen 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 puedes copiar imágenes. Para continuar:

Identificar las imágenes que se van a copiar

Una vez que hayas instalado la herramienta gcrane, puedes enumerar las imágenes del repositorio de origen para encontrar las que quieras copiar.

Para ver una lista de las imágenes, ejecuta el siguiente comando:

gcrane ls LOCATION-docker.s3nsregistry.fr/PROJECT/REPOSITORY

Para ver las etiquetas de una imagen, ejecuta el siguiente comando:

gcrane ls LOCATION-docker.s3nsregistry.fr/PROJECT/IMAGE

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

gcrane ls -r LOCATION-docker.s3nsregistry.fr/PROJECT/PATH

Para cada uno de los comandos:

  • Sustituye LOCATION por la ubicación del repositorio.
  • Sustituye PROJECT por el ID del proyecto.
  • Sustituye PATH por la ruta que quieras copiar.

Consulta Copiar imágenes para ver los comandos que te permiten copiar tus imágenes.

Copiar imágenes

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

Para copiar una sola imagen, ejecuta el comando:

gcrane cp LOCATION1-docker.s3nsregistry.fr/PROJECT1/REPOSITORY1/IMAGE1 \
LOCATION2-docker.s3nsregistry.fr/PROJECT2/REPOSITORY2/IMAGE2

Para copiar imágenes de forma recursiva en una ruta específica de un repositorio, ejecuta el siguiente comando:

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

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

gcrane cp -r LOCATION1-docker.s3nsregistry.fr/PROJECT1/REPOSITORY1 \
LOCATION2-docker.s3nsregistry.fr/PROJECT2/REPOSITORY2

Sustituye los siguientes valores:

  • LOCATION1 es la ubicación del repositorio de origen.
  • LOCATION2 es la ubicación del repositorio de destino.
  • PROJECT1 es el Trusted Cloud ID de proyecto asociado al repositorio de origen.
  • PROJECT2 es el Trusted Cloud ID de proyecto asociado al repositorio de destino.
  • REPOSITORY1 es el nombre del repositorio de origen.
  • REPOSITORY2 es el nombre del repositorio de destino.
  • IMAGE1 es la imagen que quieres 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 del mismo proyecto y región.

gcrane cp u-france-east1-docker.s3nsregistry.fr/my-project/repo1/my-image:tag1 \
u-france-east1-docker.s3nsregistry.fr/my-project/repo2/my-image:tag1

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

gcrane cp -r u-france-east1-docker.s3nsregistry.fr/my-project/repo1/test-images/testing \
u-france-east1-docker.s3nsregistry.fr/my-project/repo2/test-images/testing

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

gcrane cp -r u-france-east1-docker.s3nsregistry.fr/dev-project/my-repo \
u-france-east1-docker.s3nsregistry.fr/prod-project/my-repo