Como parte de la transición de Container Registry a Artifact Registry, puedes copiar las imágenes de Container Registry que deseas conservar en Artifact Registry.
Descripción general
Existen varias opciones para copiar imágenes de Container Registry a Artifact Registry. Recomendamos copiar imágenes con la herramienta de migración automática porque permite copiar varios proyectos, puede copiar tus imágenes incluso si ya habilitaste el redireccionamiento y puede controlar una mayor cantidad de imágenes que otros métodos. Si no tienes más de 10,000 imágenes y aún no habilitaste la redirección, puedes usar la herramienta gcrane, que también admite la copia de conjuntos de imágenes con un solo comando.
Para reducir costos, haz lo siguiente:
Quita las imágenes antiguas sin etiquetar antes de copiar los contenedores en Artifact Registry.
Si copias imágenes en un repositorio estándar (
pkg.dev
) de Artifact Registry, inhabilita el análisis automático de Artifact Registry antes de copiar imágenes para evitar costos de análisis duplicados. Puedes volver a habilitar el análisis automático después de copiar todas tus imágenes.Si copias imágenes a un repositorio de
gcr.io
en Artifact Registry, no necesitas inhabilitar el análisis automatizado.Para obtener más información sobre cómo controlar los costos relacionados con el análisis de vulnerabilidades, consulta Controla los costos del análisis de vulnerabilidades.
Quita las imágenes sin etiquetar de Container Registry
Quitar las imágenes sin etiquetar reduce el costo del almacenamiento en Container Registry y el costo del copiado de imágenes de Container Registry a Artifact Registry.
Hay una serie de herramientas disponibles para identificar y automatizar la eliminación de imágenes que ya no necesitas. Por ejemplo, la herramienta gcr-cleaner te ayuda a encontrar y quitar imágenes antiguas según criterios diferentes.
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 documentación gcr-cleaner.
Copia imágenes con la herramienta de migración automática
Usa la herramienta de migración automática para hacer la transición desde Container Registry a los repositorios gcr.io en Artifact Registry o a los repositorios estándar de Artifact Registry, o para copiar las imágenes de Container Registry a Artifact Registry.
Sigue las instrucciones que se indican en Migra automáticamente a Artifact Registry para copiar tus imágenes de Container Registry a Artifact Registry.
Copia imágenes mediante gcrane
Para copiar imágenes en Artifact Registry, puedes usar la herramienta gcrane
.
gcrane
ofrece varios beneficios en comparación con la copia de imágenes con Docker, incluidos los siguientes:
- 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.
- Se omiten las capas de imagen que ya se subieron.
Una opción de copia rápida cuando se copian imágenes entre Container Registry y Artifact Registry dentro de la misma multirregión de Google Cloud.
La opción de copia rápida también es el método de copia más económico. Debido a que esta opción no depende de la extracción y el envío de imágenes, no se aplican cargos por la transferencia de datos de red desde Container Registry durante la operación de copia.
Requisitos
Verifica los siguientes requisitos:
Habilitaste Artifact Registry en los proyectos de Google Cloud de origen y de destino.
Creaste un repositorio de Docker en Artifact Registry para las imágenes que copias.
Tienes los permisos necesarios:
Visualizador de objetos de Storage (
roles/storage.objectViewer
) o un rol con permisos equivalentes en el bucket de almacenamiento para el host de Container Registry. Obtén información para otorgar estos permisos.Escritor de Artifact Registry (
roles/artifactregistry.writer
) o un rol con permisos equivalentes para el repositorio de Artifact Registry. Obtén información para otorgar estos permisos.
Para usar la opción de copia rápida, verifica que se cumplan los siguientes requisitos:
Debes usar la versión 0.10.0 de gcrane o una posterior. En las instrucciones de configuración de gcrane en esta documentación, se incluyen los pasos para descargar la versión más reciente.
Para verificar la versión de una instalación existente de gcrane, ejecuta el siguiente comando:
gcrane version
La cuenta de servicio administrada por Google de Artifact Registry del proyecto de destino debe tener la función de Visualizador de objetos de almacenamiento (
roles/storage.objectViewer
) o una función con permisos equivalentes en el proyecto de origen. Ejecuta el siguiente comando para otorgar el rol de visualizador de objetos de Storage a la cuenta 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'
Reemplaza
SOURCE_PROJECT_ID
por el ID (p. ej., “my-project”) del proyecto de Google Cloud que contiene tus hosts de Container Registry.Reemplaza
DEST_PROJECT_NUMBER
por el número (p. ej., 12345) del proyecto de Google Cloud con tu repositorio de Artifact Registry.
Opciones y costos del entorno
Puedes ejecutar gcrane
desde varios 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.
- Transferencia de datos de red para las imágenes que copies, a menos que uses la opción de copia rápida. Para minimizar los costos, haz lo siguiente:
- Usa una instancia de VM en la misma ubicación que el bucket de almacenamiento de Container Registry.
- Para minimizar el costo 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 una misma multirregión no genera cargos y es mucho más rápida que la copia entre ubicaciones.
Cloud Shell: Una opción para copiar conjuntos pequeños de 40 GB o menos. Debido a que
gcrane
omite la carga de capas de imagen 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: Es la transferencia de datos de red para las imágenes que copias, a menos que uses la opción de copia rápida.
- 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
- Para minimizar el costo 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 una misma multirregión no genera cargos y es mucho más rápida que la copia entre ubicaciones.
Máquina local: Si no puedes usar las demás opciones, puedes ejecutar
gcrane
desde una máquina local.Costos: Es la transferencia de datos de red para las imágenes que copias, a menos que uses la opción de copia rápida.
Para minimizar el costo 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 una misma multirregión no genera cargos y es mucho más rápida que copiar entre ubicaciones.
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 del registro desde el que realizas la copia.
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
del 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:
Identificar las imágenes que deseas copiar
Después de haber instalado gcrane, puedes enumerar las imágenes existentes en Container Registry para buscar las que deseas copiar.
Para enumerar las imágenes existentes, ejecuta el siguiente comando:
gcrane ls LOCATION.gcr.io/PROJECT
Para enumerar las etiquetas que tiene una imagen, ejecuta el siguiente comando:
gcrane ls LOCATION.gcr.io/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.gcr.io/PROJECT/PATH
Para cada uno de los comandos, haz lo siguiente:
- Reemplaza
LOCATION
por la multirregión del registro:asia
,eu
ous
. - Reemplaza
PROJECT
por el ID del proyecto.
Consulta Copia imágenes a fin de ver los comandos necesarios para copiar tus imágenes.
Copia imágenes
Puedes copiar imágenes individuales de Container Registry, todas las imágenes de una ruta específica en una ubicación o todas las imágenes almacenadas en una ubicación.
Copia una sola imagen
Para copiar una sola imagen etiquetada, ejecuta el siguiente comando:
gcrane cp GCR-LOCATION.gcr.io/PROJECT/IMAGE \
AR-LOCATION.pkg.dev/PROJECT/REPOSITORY/IMAGE
Donde
- 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 deseas copiar desde Container Registry.
- AR-IMAGE es el nombre de la imagen en Artifact Registry.
Por ejemplo, considera la siguiente imagen de origen y 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
Copia todas las imágenes en una ruta de acceso
Para copiar imágenes en una ruta específica de Container Registry de manera recursiva, ejecuta el siguiente comando:
gcrane cp -r GCR-LOCATION.gcr.io/PROJECT/GCR-PATH \
AR-LOCATION.pkg.dev/PROJECT/REPOSITORY/AR-PATH
Donde
- 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 acceso de los archivos que deseas copiar.
- AR-PATH es la ruta de las imágenes en tu repositorio de Artifact Registry.
Por ejemplo, considera las siguientes rutas de origen y destino:
- Ruta de acceso de Container Registry:
eu.gcr.io/my-project/test-images/testing
- Ruta de acceso de Artifact Registry:
europe-docker.pkg.dev/my-project/my-repo/test-images/testing
Mediante el siguiente comando, se copian de forma recursiva todas las imágenes de test-images/testing
al 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
Copia todas las imágenes de una ubicación de Container Registry
Para copiar todas las imágenes desde una multirregión de Container Registry, ejecuta el siguiente comando:
gcrane cp -r GCR-LOCATION.gcr.io/PROJECT \
AR-LOCATION.pkg.dev/PROJECT/REPOSITORY
Donde
- 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 deseas copiar imágenes para más de una ubicación de Container Registry en tu proyecto, ejecuta el comando una vez para cada host.
Por ejemplo, considera el siguiente registro de código fuente y el repositorio de Artifact Registry de destino. En este ejemplo, Container Registry y Artifact Registry se encuentran en proyectos diferentes.
- Host de Container Registry:
eu.gcr.io/my-project
- Imagen de Artifact Registry:
europe-docker.pkg.dev/new-project/my-repo
Mediante el siguiente comando, se copian 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
Copia imágenes mediante Docker
A diferencia de los métodos de copiado de gcrane y gcloud, este enfoque es un proceso de dos pasos.
- Extrae una imagen de Container Registry.
- Envía la imagen a tu repositorio de Artifact Registry.
Requisitos
Verifica los siguientes requisitos:
Creaste un repositorio de Docker en Artifact Registry para las imágenes que copias.
Tienes los permisos necesarios:
Visualizador de objetos de Storage (
roles/storage.objectViewer
) o un rol con permisos equivalentes en el bucket de almacenamiento para el host de Container Registry. Obtén información para otorgar estos permisos.Escritor de Artifact Registry (
roles/artifactregistry.writer
) o un rol con permisos equivalentes para el repositorio de Artifact Registry. Obtén información para otorgar estos permisos.
Configuraste Docker para que se autentique en Container Registry y Artifact Registry.
Costos
Cuando extraes una imagen, se te factura por la transferencia de datos de red. Los precios específicos dependen del destino de tu comando de extracción. Por ejemplo, si extraes una imagen desde una sesión de Cloud Shell, el precio corresponde a la transferencia de datos de red dentro de Google Cloud. Si extraes una imagen a una máquina fuera de Google Cloud, consulta el precio de la transferencia general de datos de red.
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. Existen dos diferencias clave:
- El nombre de host para los repositorios de Docker de Artifact Registry incluye un prefijo de ubicación seguido de
-docker.pkg.dev
. Entre los ejemplos, se incluyenaustralia-southeast1-docker.pkg.dev
,europe-north1-docker.pkg.dev
yeurope-docker.pkg.dev
. - Debido a que Artifact Registry admite varios repositorios de Docker en un solo proyecto, debes especificar el nombre del repositorio en los comandos.
Para copiar una imagen en Artifact Registry mediante Docker, extrae la imagen de Container Registry y, luego, envíala a tu repositorio de Artifact Registry.
Por ejemplo, considera una imagen de Container Registry en la multirregión eu
y que deseas copiar en un repositorio de Artifact Registry en 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
Mediante el siguiente comando, se 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
configures en un proyecto diferente. En este ejemplo, se envía la misma imagen de origen al repositorio my-repo
en el proyecto new-project
.
docker push europe-north1-docker.pkg.dev/new-project/my-repo/my-image
Para obtener información sobre el envío y la extracción de imágenes en Artifact Registry, consulta Envía y extrae imágenes.
Copia imágenes mediante 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:
Creaste un repositorio de Docker en Artifact Registry para las imágenes que copias.
Tienes los permisos necesarios:
Visualizador de objetos de Storage (
roles/storage.objectViewer
) o un rol con permisos equivalentes en el bucket de almacenamiento para el host de Container Registry. Obtén información para otorgar estos permisos.Escritor de Artifact Registry (
roles/artifactregistry.writer
) o un rol con permisos equivalentes para el repositorio de Artifact Registry. Obtén información para otorgar estos permisos.
Costos
Si Container Registry está en una ubicación diferente a la de tu repositorio de Artifact Registry, se aplicarán cargos por transferencia de datos de red por 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
Donde
- GCR-IMAGE es la ruta de acceso completa a la imagen de Container Registry.
- AR-IMAGE es la ruta completa de la imagen en el repositorio de Artifact Registry.
Por ejemplo, considera las siguientes imágenes de origen y 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
Con este comando, se copia la imagen de Container Registry en la eu
multirregional en el repositorio my-repo
en la europe
multirregional.
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
configures 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
¿Qué sigue?
- Obtén más información sobre la transición de Container Registry a Artifact Registry, incluidas las comparaciones de funciones y comandos de gcloud CLI.
- Obtén más información acerca de los Cambios para Docker.
- Obtén más información sobre los cambios para compilar e implementar en Google Cloud.