Como parte de la transición de Container Registry a Artifact Registry, puedes copiar las imágenes de Container Registry que quieras conservar en Artifact Registry.
Información general
Hay varias opciones para copiar imágenes de Container Registry a Artifact Registry. Te recomendamos que copies las imágenes con la herramienta de migración automática, ya que admite la copia de varios proyectos, puede copiar tus imágenes aunque ya hayas habilitado la redirección y puede gestionar un mayor número de imágenes que otros métodos.
Para reducir los costes, haz lo siguiente:
Elimina las imágenes antiguas sin etiquetar antes de copiar los contenedores en Artifact Registry.
Si vas a copiar imágenes en un repositorio estándar (
pkg.dev
) de Artifact Registry, inhabilita el análisis automatizado de Artifact Registry antes de copiar las imágenes para evitar que se te cobre por el análisis duplicado. Puedes volver a habilitar el análisis automático después de copiar todas tus imágenes.Si vas a copiar imágenes en un repositorio
gcr.io
de Artifact Registry, no es necesario que inhabilites el análisis automatizado.Para obtener más información sobre cómo controlar los costes relacionados con el análisis de vulnerabilidades, consulta el artículo Controlar los costes de análisis de vulnerabilidades.
Eliminar imágenes sin etiquetar de Container Registry
Si eliminas las imágenes sin etiquetar, se reduce el coste de almacenamiento en Container Registry, así como el coste de copiar imágenes de Container Registry a Artifact Registry.
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.
Copiar imágenes con la herramienta de migración automática (opción recomendada)
Usa la herramienta de migración automática para pasar de los repositorios de Container Registry a los repositorios de gcr.io
en Artifact Registry, a los repositorios estándar de Artifact Registry o para copiar tus imágenes de Container Registry a Artifact Registry.
Esta herramienta solo admite la migración y la copia a la misma multirregión.
Sigue las instrucciones de Migrar automáticamente a Artifact Registry para copiar tus imágenes de Container Registry a Artifact Registry.
Copiar imágenes con gcrane
Para copiar imágenes en Artifact Registry, también puedes usar la herramienta gcrane
.
gcrane
permite copiar imágenes entre varias regiones, pero tiene los siguientes inconvenientes:
gcrane
es más lento 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 faltan datos.
Requisitos
Verifica los siguientes requisitos:
Tienes Artifact Registry habilitado en los proyectos de origen y destino. Google Cloud
Has creado un repositorio de Docker en Artifact Registry para las imágenes que vas a copiar.
Tienes los permisos necesarios:
Lector de objetos de Storage (
roles/storage.objectViewer
) o un rol con permisos equivalentes en el segmento de almacenamiento del host de Container Registry. Consulta cómo conceder estos permisos.Escritor de Artifact Registry (
roles/artifactregistry.writer
) o un rol con permisos equivalentes para el repositorio de Artifact Registry. Consulta cómo conceder estos permisos.
Para usar la opción de copia rápida, comprueba que cumples los siguientes requisitos:
Debes usar la versión 0.10.0 o una posterior de gcrane. Las instrucciones de configuración de gcrane de esta documentación 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
El agente de servicio de Artifact Registry del proyecto de destino debe tener el rol de lector de objetos de Storage (
roles/storage.objectViewer
) o un rol con permisos equivalentes en el proyecto de origen. Ejecuta el siguiente comando para conceder el rol Visor 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'
Sustituye
SOURCE_PROJECT_ID
por el ID (por ejemplo, "my-project") del Google Cloud proyecto con tus hosts de Container Registry.Sustituye
DEST_PROJECT_NUMBER
por el número (por ejemplo, 12345) del Google Cloud proyecto con tu repositorio de Artifact Registry.
Opciones y costes del entorno
Puedes ejecutar gcrane
desde varios 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.
- Transferencia de datos de red para las imágenes que copies, a menos que utilices la opción de copia rápida. Para minimizar los costes, haz lo siguiente:
- Usa una instancia de VM en la misma ubicación que el segmento de almacenamiento de Container Registry.
- Para minimizar los costes y maximizar la velocidad de copia, usa un repositorio de Artifact Registry en la misma multirregión que Container Registry. La transferencia de datos dentro de la misma multirregión no conlleva ningún cargo y es mucho más rápida que la copia entre ubicaciones.
Cloud Shell: opción para copiar conjuntos pequeños de unos 40 GB o menos. Como
gcrane
omite la subida de las capas de imagen que ya se han subido, este límite se aplica a los datos nuevos que estés copiando.Si copias repositorios más grandes, es posible que Cloud Shell se desconecte después del periodo de tiempo de espera de la solicitud, que es de 10 minutos.
Costes: transferencia de datos de red de las imágenes que copies, a menos que utilices la opción de copia rápida.
- No puedes elegir la ubicación de una sesión de Cloud Shell. Para comprobar la ubicación de la sesión actual, ejecuta el comando:
curl metadata/computeMetadata/v1/instance/zone
- Para minimizar los costes y maximizar la velocidad de copia, usa un repositorio de Artifact Registry en la misma multirregión que Container Registry. La transferencia de datos dentro de la misma multirregión no conlleva ningún cargo y es mucho más rápida que la copia entre ubicaciones.
Máquina local: si no puedes usar las otras opciones, puedes ejecutar
gcrane
desde una máquina local.Costes: transferencia de datos de red de las imágenes que copies, a menos que utilices la opción de copia rápida
Para minimizar los costes y maximizar la velocidad de copia, usa un repositorio de Artifact Registry en la misma multirregión que Container Registry. La transferencia de datos dentro de la misma multirregión no conlleva ningún cargo y es mucho más rápida que la copia entre ubicaciones.
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 Cloud Shell
Abre una ventana de Cloud Shell.
Define el proyecto predeterminado. Sustituye 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
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 gcrane, puedes enumerar las imágenes de Container Registry para encontrar las que quieras copiar.
Para ver una lista de las imágenes, ejecuta el siguiente comando:
gcrane ls LOCATION.gcr.io/PROJECT
Para ver las etiquetas de una imagen, ejecuta el siguiente comando:
gcrane ls LOCATION.gcr.io/PROJECT/IMAGE
Para enumerar las imágenes de forma recursiva en una ruta específica, ejecuta el siguiente comando:
gcrane ls -r LOCATION.gcr.io/PROJECT/PATH
Para cada uno de los comandos:
- Sustituye
LOCATION
por la multirregión del registro:asia
,eu
ous
. - Sustituye
PROJECT
por el ID del proyecto.
Consulta Copiar imágenes para ver los comandos que te permiten copiar tus imágenes.
Copiar imágenes
Puede copiar imágenes concretas de Container Registry, todas las imágenes de una ruta especificada de una ubicación o todas las imágenes almacenadas en una ubicación.
Copiar una sola imagen
Para copiar una sola imagen etiquetada, ejecuta el comando:
gcrane cp GCR-LOCATION.gcr.io/PROJECT/IMAGE \
AR-LOCATION.pkg.dev/PROJECT/REPOSITORY/IMAGE
Dónde
- GCR-LOCATION es la multirregión del host de Container Registry:
asia
,eu
ous
. - 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 que quieres copiar de Container Registry.
- AR-IMAGE es el nombre de la imagen en Artifact Registry.
Por ejemplo, supongamos que tenemos las siguientes imágenes de origen y de 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
Copiar todas las imágenes de una ruta
Para copiar imágenes de forma recursiva en una ruta específica de Container Registry, ejecuta el siguiente comando:
gcrane cp -r GCR-LOCATION.gcr.io/PROJECT/GCR-PATH \
AR-LOCATION.pkg.dev/PROJECT/REPOSITORY/AR-PATH
Dónde
- GCR-LOCATION es la multirregión del host de Container Registry:
asia
,eu
ous
. - 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 de tu repositorio de Artifact Registry.
Por ejemplo, considere las siguientes rutas de origen y de destino:
- Ruta de Container Registry:
eu.gcr.io/my-project/test-images/testing
- Ruta de Artifact Registry:
europe-docker.pkg.dev/my-project/my-repo/test-images/testing
El siguiente comando copia de forma recursiva todas las imágenes de test-images/testing
en el 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
Copiar 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 siguiente comando:
gcrane cp -r GCR-LOCATION.gcr.io/PROJECT \
AR-LOCATION.pkg.dev/PROJECT/REPOSITORY
Dónde
- GCR-LOCATION es la multirregión del host de Container Registry:
asia
,eu
ous
. - 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 quiere copiar imágenes en más de una ubicación de Container Registry en su proyecto, ejecute el comando una vez por cada host.
Por ejemplo, supongamos que tiene el siguiente registro de origen y el siguiente repositorio de Artifact Registry de destino. En este ejemplo, Container Registry y Artifact Registry están en proyectos diferentes.
- Host de Container Registry:
eu.gcr.io/my-project
- Imagen de Artifact Registry:
europe-docker.pkg.dev/new-project/my-repo
El siguiente comando copia 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
Copiar imágenes con Docker
A diferencia de los métodos de copia gcrane y gcloud, este enfoque consta de dos pasos.
- Extraer una imagen de Container Registry
- Envía la imagen a tu repositorio de Artifact Registry.
Requisitos
Verifica los siguientes requisitos:
Has creado un repositorio de Docker en Artifact Registry para las imágenes que vas a copiar.
Tienes los permisos necesarios:
Lector de objetos de Storage (
roles/storage.objectViewer
) o un rol con permisos equivalentes en el segmento de almacenamiento del host de Container Registry. Consulta cómo conceder estos permisos.Escritor de Artifact Registry (
roles/artifactregistry.writer
) o un rol con permisos equivalentes para el repositorio de Artifact Registry. Consulta cómo conceder estos permisos.
Has configurado Docker para que se autentique en Container Registry y Artifact Registry.
Costes
Cuando extraes una imagen, se te cobra por la transferencia de datos de red. El precio específico depende del destino del comando pull. Por ejemplo, si extraes una imagen de una sesión de Cloud Shell, los precios se aplican a la transferencia de datos de red Google Cloud. Si extraes una imagen a una máquina fuera de Google Cloud, se aplicarán los precios de transferencia de datos de red generales.
Los comandos de Docker que usas para etiquetar, enviar y extraer imágenes en Artifact Registry son similares a los que usas en Container Registry. Hay dos diferencias principales:
- El nombre de host de los repositorios de Docker de Artifact Registry incluye un prefijo de ubicación seguido de
-docker.pkg.dev
. Por ejemplo,australia-southeast1-docker.pkg.dev
,europe-north1-docker.pkg.dev
yeurope-docker.pkg.dev
. - Como Artifact Registry admite varios repositorios de Docker en un mismo proyecto, debe especificar el nombre del repositorio en los comandos.
Para copiar una imagen en Artifact Registry con Docker, extrae la imagen de Container Registry y, a continuación, envíala a tu repositorio de Artifact Registry.
Por ejemplo, supongamos que tienes una imagen de Container Registry en la multirregión eu
y quieres copiarla en un repositorio de Artifact Registry de la región europe
.
- 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
El siguiente comando 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 llamado 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 que hayas configurado en otro proyecto. En este ejemplo, se envía la misma imagen de origen al repositorio my-repo
del proyecto new-project
.
docker push europe-north1-docker.pkg.dev/new-project/my-repo/my-image
Para obtener información sobre cómo insertar y extraer imágenes en Artifact Registry, consulta el artículo Insertar y extraer imágenes.
Copiar imágenes con 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:
Has creado un repositorio de Docker en Artifact Registry para las imágenes que vas a copiar.
Tienes los permisos necesarios:
Lector de objetos de Storage (
roles/storage.objectViewer
) o un rol con permisos equivalentes en el segmento de almacenamiento del host de Container Registry. Consulta cómo conceder estos permisos.Escritor de Artifact Registry (
roles/artifactregistry.writer
) o un rol con permisos equivalentes para el repositorio de Artifact Registry. Consulta cómo conceder estos permisos.
Costes
Si Container Registry se encuentra en una ubicación distinta a la de tu repositorio de Artifact Registry, se aplican cargos por transferencia de datos de red a las imágenes que copies. Si ambos servicios están en la misma ubicación, la transferencia de datos de red 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
Dónde
- GCR-IMAGE es la ruta completa a la imagen de Container Registry.
- AR-IMAGE es la ruta completa de la imagen en el repositorio de Artifact Registry.
Por ejemplo, supongamos que tenemos las siguientes imágenes de origen y de 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 de la multirregión eu
al repositorio my-repo
de la multirregión europe
.
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 en un repositorio de Artifact Registry que hayas configurado en otro proyecto. En este ejemplo, se copia la misma imagen de origen en el repositorio my-repo
del 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
Siguientes pasos
- Consulta más información sobre la transición de Container Registry a Artifact Registry, incluidas las comparaciones de funciones y comandos de la CLI de gcloud.
- Consulta los cambios en Docker.
- Consulta información sobre los cambios para desarrollar y desplegar en Google Cloud.