Puedes usar la herramienta gcrane
para copiar imágenes entre repositorios de Docker en Artifact Registry.
Antes de empezar
Verifica los siguientes requisitos:
Has creado el repositorio de Docker de destino en Artifact Registry para las imágenes que vas a copiar.
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:
- 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.
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.
Detén la instancia de VM. Consulta Detener una instancia.
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.
Reinicia la instancia de VM. Consulta Iniciar una instancia detenida.
Conéctate a la instancia de VM mediante 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 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 puedes copiar imágenes. Para continuar:
Configurar una máquina local
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
Ejecuta los siguientes comandos para que el comando
gcrane
sea ejecutable. Los comandos asumen 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 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