Puedes usar la herramienta gcrane
para copiar imágenes entre repositorios de Docker en Artifact Registry.
Antes de comenzar
Verifica los siguientes requisitos:
Creaste el repositorio de Docker de destino en Artifact Registry para las imágenes que copias.
Tienes los permisos necesarios:
Lector de Artifact Registry (
roles/storage.objectViewer
) o un rol con permisos equivalentes para el repositorio del 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 entre repositorios con compatibilidad con lo siguiente:
- Copia los conjuntos de imágenes mediante un solo comando, incluidas todas las imágenes en una ruta de acceso específica o todas las imágenes almacenadas en un host multirregional de tu proyecto.
- Omitir las capas de imagen que ya se subieron
Cómo quitar imágenes que no se usan
Quitar imágenes que no se usan 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 de las imágenes que ya no necesitas. Por ejemplo, la herramienta gcr-cleaner te ayuda a encontrar y quitar imágenes antiguas en función de 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.
Cómo configurar 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 de la VM de Compute Engine. Si la instancia de VM está en una ubicación diferente a la del repositorio de origen, es posible que se apliquen cargos de salida de red por las imágenes que copies.
Cloud Shell: Una opción para copiar conjuntos pequeños de 40 GB o menos. Como la herramienta
gcrane
omite la carga de capas de imágenes que ya se subieron, este límite se aplica a 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 está en una ubicación diferente a la del repositorio de origen, es posible que se apliquen cargos de salida de red por las imágenes que copies. No puedes elegir la ubicación de una sesión de Cloud Shell. Para verificar la ubicación de la sesión actual, ejecuta el siguiente comando:
curl metadata/computeMetadata/v1/instance/zone
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 que se incluyen en las siguientes secciones incluyen 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:
- Crea una instancia de VM. Para minimizar los costos, crea la instancia en la misma ubicación que el registro del que copias.
De forma predeterminada, la instancia de VM está asociada con la cuenta de servicio predeterminada y tiene permisos para extraer imágenes. Debes cambiar el permiso de acceso para que la instancia de VM pueda enviar imágenes.
Detén la instancia de VM. Consulta Detén una instancia.
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.
Reinicia la instancia de VM. Consulta Inicia una instancia detenida.
Conéctate a la instancia de VM con SSH.
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
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/
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
Abre una ventana de Cloud Shell.
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
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
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/
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
Descarga
gcrane
desde el repositorio de GitHub. Por ejemplo, el siguiente comando descarga la distribución 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
Ejecuta los siguientes comandos para hacer que el comando
gcrane
sea ejecutable. Los comandos suponen que el archivo descargado se llamago-containerregistry.tar.gz
.tar -zxvf go-containerregistry.tar.gz chmod +x gcrane sudo mv gcrane /usr/local/bin/
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 el repositorio de origen para encontrar las que deseas 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 recursiva en una ruta de acceso específica de un repositorio, ejecuta el siguiente 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 siguiente 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 origen.
- LOCATION2 es la ubicación del repositorio de destino.
- PROJECT1 es el ID del proyecto de Google Cloud asociado con el repositorio de origen.
- PROJECT2 es el ID del proyecto de Google Cloud asociado con el 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
Con el siguiente comando, se copia my-image:tag1
del repositorio repo1
al repositorio repo2
dentro del mismo proyecto y 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
Mediante el siguiente comando, se copian de forma recursiva todas las imágenes de test-images/testing
en el repositorio repo1
a la misma ruta de acceso 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
Mediante el siguiente comando, se copian 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 us-west1-docker.pkg.dev/dev-project/my-repo \
us-west1-docker.pkg.dev/prod-project/my-repo