Información general de Container Registry

Container Registry es el servicio antiguo para almacenar imágenes de contenedor privadas en Google Cloud.

El servicio está obsoleto. Puedes mover tus imágenes a Artifact Registry y seguir accediendo a ellas con el dominio gcr.io. A partir del 15 de mayo del 2024, los proyectos que no hayan usado Container Registry anteriormente solo alojarán imágenes del dominio gcr.io en Artifact Registry.

Para ver una comparación entre Container Registry y Artifact Registry, así como información sobre cómo migrar de Container Registry a Artifact Registry, consulta Migrar desde Container Registry.

Trabajar con tus imágenes

Mucha gente usa Docker Hub como registro central para almacenar imágenes Docker públicas, pero para controlar el acceso a tus imágenes, debes usar un registro privado, como Artifact Registry o Container Registry.

Puedes acceder al registro a través de endpoints HTTPS seguros, que te permiten enviar, extraer y gestionar imágenes desde cualquier sistema, instancia de VM o tu propio hardware.

Registros

Puede crear hasta cuatro hosts multirregionales en cada Google Cloud proyecto con Container Registry. Si quieres crear repositorios más discretos con políticas de acceso independientes o almacenar imágenes en regiones en lugar de multirregiones, usa Artifact Registry.

Los registros de Container Registry se denominan por el host y el ID de proyecto. Para trabajar con imágenes (por ejemplo, insertar, extraer o eliminar), identifica la imagen con el siguiente formato:

HOSTNAME/PROJECT-ID/IMAGE:TAG

o

HOSTNAME/PROJECT-ID/IMAGE@IMAGE-DIGEST

donde:

  • HOSTNAME es la ubicación en la que se almacena la imagen:

    • gcr.io aloja actualmente las imágenes en Estados Unidos, pero la ubicación puede cambiar en el futuro.
    • us.gcr.io aloja la imagen en Estados Unidos, en un segmento de almacenamiento independiente de las imágenes alojadas por gcr.io.
    • eu.gcr.io aloja las imágenes en los Estados miembros de la Unión Europea.
    • asia.gcr.io aloja las imágenes en Asia

    Estas ubicaciones corresponden a las multirregiones de los segmentos de almacenamiento de Cloud Storage. Cuando envías una imagen a un registro con un nombre de host nuevo, Container Registry crea un segmento de almacenamiento en la multirregión especificada. Este segmento es el almacenamiento subyacente del registro. En un proyecto, todos los registros con el mismo nombre de host comparten un mismo contenedor de almacenamiento.

  • PROJECT-ID es el Google Cloud ID del proyecto de la consola. Si el ID de tu proyecto contiene dos puntos (:), consulta la sección Proyectos con ámbito de dominio más abajo.

  • IMAGE es el nombre de la imagen. Puede ser diferente del nombre local de la imagen. En la consola Google Cloud , los registros del proyecto se muestran por el nombre de la imagen. Cada repositorio puede contener varias imágenes con el mismo nombre. Por ejemplo, puede contener diferentes versiones de una imagen llamada "my-image".

  • Si añades :TAG o @IMAGE-DIGEST al final, podrás distinguir una versión específica de la imagen, pero también es opcional. Si no especifica una etiqueta o el digest, Container Registry buscará la imagen con la etiqueta predeterminada latest. Consulta las versiones de las imágenes de un registro más abajo.

Para la imagen my-image del registro gcr.io/PROJECT-ID, utiliza este formato para enviar o extraer una imagen:

gcr.io/PROJECT-ID/my-image:tag1

donde PROJECT-ID es el Google Cloud ID del proyecto de la consola.

Organizar imágenes con repositorios

Puedes agrupar imágenes relacionadas en un repositorio dentro de un registro. Cuando etiquetes, envíes o extraigas una imagen, especifica el nombre del repositorio en el proyecto de la ruta de la imagen.

En Container Registry, los repositorios ayudan a organizar el contenido. Funcionan como carpetas lógicas en la ruta de la imagen, pero no reflejan la estructura real del sistema de archivos ni admiten un control de acceso más granular.

Supongamos que tiene las siguientes imágenes almacenadas en el host us.gcr.io del proyecto builds:

us.gcr.io/builds/product1/dev/product1-app:beta-2.0
us.gcr.io/builds/product1/stable/product1:1.0
us.gcr.io/builds/product2/dev/product2:alpha
us.gcr.io/builds/product2/stable/product2:1.0

Si un usuario tiene acceso de escritura al host us.gcr.io en el proyecto builds, tendrá acceso de escritura a cualquier ruta de us.gcr.io/builds, ya que todas las imágenes están en el mismo segmento de almacenamiento y no se puede restringir el acceso a nivel de repositorio o de imagen.

Si necesitas un control de acceso más granular, puedes usar Artifact Registry. En Artifact Registry, los repositorios son recursos independientes, por lo que puedes aplicar políticas de gestión de identidades y accesos independientes a repositorios como us-docker.pkg.dev/builds/product1 y us-docker.pkg.dev/builds/product2.

Versiones de imágenes en un registro

Un registro puede contener muchas imágenes, y estas imágenes pueden tener diferentes versiones. Para identificar una versión específica de la imagen en un registro, puede especificar la etiqueta o el digest de la imagen.

  • Las etiquetas funcionan como etiquetas. Puedes aplicar varias etiquetas a una imagen. Por ejemplo, una imagen puede tener la etiqueta v1.5 para indicar el número de versión y release-candidate para indicar que está lista para las pruebas finales.
  • Los resúmenes se generan automáticamente, son únicos para una versión de una imagen y tienen el formato @IMAGE-DIGEST, donde IMAGE-DIGEST es el valor de hash sha256 del contenido de la imagen.

Para identificar una versión específica de la imagen my-image, sigue estos pasos:

  • Añade la etiqueta de imagen:

    gcr.io/PROJECT-ID/my-image:tag1
    
  • O bien, añade el digest de la imagen:

    gcr.io/PROJECT-ID/my-image@sha256:4d11e24ba8a615cc85a535daa17b47d3c0219f7eeb2b8208896704ad7f88ae2d
    

donde PROJECT-ID es el Google Cloud ID del proyecto de la consola. Si el ID de tu proyecto contiene dos puntos (:), consulta la sección Proyectos con ámbito de dominio más abajo.

En la consola de Google Cloud , en la pantalla Imágenes, la columna Etiquetas muestra las etiquetas de la imagen. Haz clic en la versión de la imagen para ver los metadatos, incluido el resumen de la imagen.

Consulta Etiquetar imágenes para saber cómo modificar etiquetas.

Proyectos con ámbito de dominio

Si tu proyecto está acotado a tu dominio, el ID del proyecto incluye el nombre del dominio seguido de dos puntos (:). Debido a la forma en que Docker trata los dos puntos, debes sustituir este carácter por una barra inclinada cuando especifiques un digest de imagen en Container Registry. Identifica las imágenes de estos tipos de proyectos con el siguiente formato:

HOSTNAME/[DOMAIN]/[PROJECT]/IMAGE

Por ejemplo, el proyecto con el ID example.com:my-project podría tener la siguiente imagen:

gcr.io/example.com/my-project/image-name

Nombres de registro como URLs

La URL https://HOSTNAME/PROJECT-ID/IMAGE es la URL de una imagen de la Google Cloud consola. Cualquier usuario autenticado que tenga permiso para acceder al host del registro puede usar enlaces para ver las imágenes que almacena. Consulta Registros para obtener información sobre el formato de la ruta de la imagen.

Por ejemplo, las siguientes URLs enlazan a registros públicos en la consola:Google Cloud

Formatos de imágenes de contenedor

Container Registry admite los formatos de imagen Docker Image Manifest V2 y OCI. Para obtener más información, consulta Formatos de imagen de contenedor.

Si quieres almacenar imágenes y otros tipos de artefactos de forma centralizada, te recomendamos que uses Artifact Registry en lugar de Container Registry.

Control de acceso

Container Registry almacena sus etiquetas y archivos de capas de imágenes de contenedor en un segmento de Cloud Storage del mismo proyecto que el registro. El acceso al contenedor se configura mediante los ajustes de gestión de identidades y accesos (IAM) de Cloud Storage.

Un usuario que tenga acceso a un host de registro puede acceder a cualquier imagen del segmento de almacenamiento del host. Si necesitas un control de acceso más granular, te recomendamos que uses Artifact Registry. Artifact Registry proporciona control de acceso a nivel de repositorio.

De forma predeterminada, los propietarios y editores de proyectos tienen permisos de inserción y extracción para el segmento de Container Registry de ese proyecto. Los lectores de proyectos solo tienen permiso de extracción.

Para obtener más información sobre los permisos de Container Registry, consulta el artículo sobre cómo configurar el control de acceso.

Consulta los avisos de discontinuación de Container Registry para obtener información sobre los planes de migrar los metadatos de las imágenes de Cloud Storage a una base de datos backend de alto rendimiento.

Autenticación

Para poder enviar o extraer imágenes, debes configurar la autenticación. Puedes configurar Docker para que use la CLI de Google Cloud con el fin de autenticar las solicitudes a Container Registry. Container Registry también admite métodos de autenticación avanzados mediante tokens de acceso o archivos de claves JSON.

Asistente de credenciales de Docker

Docker necesita acceder a Container Registry para insertar y extraer imágenes. Puedes usar la herramienta de línea de comandos del asistente de credenciales de Docker para configurar tus credenciales de Container Registry y usarlas con Docker.

El asistente de credenciales obtiene tus credenciales de Container Registry, ya sea automáticamente o desde una ubicación especificada mediante su marca --token-source, y, a continuación, las escribe en el archivo de configuración de Docker. De esta forma, puedes usar la herramienta de línea de comandos de Docker, docker, para interactuar directamente con Container Registry.

Para obtener más información, consulta Autenticación avanzada.

Cuenta de servicio de Container Registry

Cuando habilitas la API de Container Registry, Container Registry añade una cuenta de servicio a tu proyecto. Esta cuenta de servicio tiene el siguiente ID:

service-[PROJECT_NUMBER]@containerregistry.iam.gserviceaccount.com

Esta cuenta de servicio de Container Registry se ha diseñado específicamente para que Container Registry pueda realizar sus tareas de servicio en tu proyecto. Google gestiona esta cuenta, pero es específica de tu proyecto.

Si eliminas esta cuenta de servicio o cambias sus permisos, algunas funciones de Container Registry no funcionarán correctamente. No debes modificar los roles ni eliminar la cuenta.

Para obtener más información sobre esta cuenta de servicio y sus permisos, consulta el artículo Cuenta de servicio de Container Registry.

Caché pull-through

El registro mirror.gcr.io almacena en caché las imágenes públicas solicitadas con frecuencia de Docker Hub.

Usar imágenes almacenadas en caché puede acelerar las extracciones de Docker Hub. Tu cliente siempre comprueba si hay una copia en caché de una imagen de Docker Hub antes de intentar extraerla directamente de Docker Hub.

Para obtener más información, consulta Extraer imágenes de Docker Hub almacenadas en caché.

Notificaciones

Puedes usar Pub/Sub para recibir notificaciones sobre los cambios que se produzcan en tus imágenes de contenedor.

Para obtener más información, consulta el artículo Configurar notificaciones de Pub/Sub.

Usar Container Registry con Google Cloud

Las instancias de Compute Engine y los clústeres de Google Kubernetes Engine pueden enviar y extraer imágenes de Container Registry en función de los ámbitos de Cloud Storage de las instancias. Consulta la sección Usar Container Registry con Google Cloud.

Las imágenes almacenadas en Container Registry se pueden desplegar en el entorno flexible de App Engine.

Continuous delivery tool integrations

Container Registry funciona con sistemas populares de integración continua y entrega continua, como Cloud Build y herramientas de terceros, como Jenkins.

Container Registry se integra a la perfección con los Google Cloud servicios. Por ejemplo, Cloud Build puede enviar y extraer imágenes de hosts de Container Registry en el mismo proyecto de forma predeterminada. Los entornos de ejecución, como Google Kubernetes Engine y Cloud Run, también pueden extraer imágenes de hosts de registro del mismo proyecto de forma predeterminada.

También puedes usar herramientas de terceros, como Jenkins, para compilar, extraer y enviar tus imágenes. Cuando utilice una herramienta de terceros, deberá configurar los permisos y la autenticación de la cuenta que interactuará con Container Registry en nombre de la herramienta.

Para ver ejemplos de integraciones, consulta las guías técnicas de Google Cloud que incluyen Container Registry.