Descripción general de Container Registry

Container Registry es el servicio heredado para almacenar imágenes de contenedores privados en Google Cloud.

El servicio está obsoleto. Puedes mover tus imágenes existentes a Artifact Registry y seguir accediendo a ellas con el dominio gcr.io. A partir del 15 de mayo de 2024, los proyectos sin uso previo de Container Registry 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 la transición de Container Registry a Artifact Registry, consulta Cómo hacer la transición desde Container Registry.

Cómo trabajar con tus imágenes

Muchas personas usan Docker Hub como un registro central para almacenar imágenes públicas de Docker. Sin embargo, para controlar el acceso a las imágenes, debes usar un registro privado, como Artifact Registry o Container Registry.

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

Registros

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

Los registros de Container Registry reciben su nombre según el host y el ID del proyecto. Para trabajar con imágenes (por ejemplo, enviarlas, extraerlas, borrarlas), 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 que se almacena la imagen:

    • Actualmente, gcr.io aloja las imágenes en los Estados Unidos, pero la ubicación puede cambiar en el futuro.
    • us.gcr.io aloja la imagen en los Estados Unidos, en un bucket 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 depósitos de almacenamiento de Cloud Storage. Cuando envías una imagen a un registro con un nombre de host nuevo, Container Registry crea un bucket de almacenamiento en la multirregión especificada. Este bucket es el almacenamiento subyacente del registro. Dentro de un proyecto, todos los registros con el mismo nombre de host comparten un bucket de almacenamiento.

  • PROJECT-ID es el ID del proyecto de la consola de Google Cloud. Si el ID de tu proyecto contiene dos puntos (:), consulta Proyectos con alcance de dominio a continuación.

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

  • La incorporación de :TAG o @IMAGE-DIGEST al final te permite distinguir una versión específica de la imagen, pero también es opcional. Si no especificas una etiqueta o el resumen, Container Registry busca la imagen con la etiqueta predeterminada latest. Consulta Versiones de imágenes dentro de un registro a continuación.

Para la imagen my-image en el registro gcr.io/PROJECT-ID, usa este formato a fin de enviar o extraer una imagen:

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

En el ejemplo anterior, PROJECT-ID es el ID del proyecto de la consola de Google Cloud.

Organiza imágenes con repositorios

Puedes agrupar imágenes relacionadas en un repositorio dentro de un registro. Cuando etiquetas, envías o extraes una imagen, especificas el nombre del repositorio en el proyecto en la ruta de la imagen.

En Container Registry, los repositorios son una ayuda para la organización. Actúan como carpetas lógicas en la ruta de acceso de la imagen, pero no reflejan la estructura real del sistema de archivos ni admiten un control de acceso más detallado.

Considera las siguientes imágenes almacenadas en el host us.gcr.io en el 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 en us.gcr.io/builds porque todas las imágenes están en el mismo bucket de almacenamiento y no puedes restringir el acceso a nivel de repositorio o imagen.

Si necesitas un control de acceso más detallado, puedes usar Artifact Registry en su lugar. En Artifact Registry, los repositorios son recursos discretos, por lo que puedes aplicar políticas de IAM independientes a los repositorios como us-docker.pkg.dev/builds/product1 y us-docker.pkg.dev/builds/product2.

Versiones de imágenes dentro de un registro

Un registro puede contener muchas imágenes, las cuales pueden tener diferentes versiones. Para identificar una versión específica de la imagen dentro de un registro, puedes especificar la etiqueta de la imagen o el resumen.

  • Las etiquetas actúan como un identificador. Puedes aplicar varias etiquetas a una imagen. Por ejemplo, una imagen puede tener la etiqueta v1.5 para un número de versión y release-candidate a fin de 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 la forma @IMAGE-DIGEST, en la que 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:

  • Agrega la etiqueta de imagen:

    gcr.io/PROJECT-ID/my-image:tag1
    
  • o agrega el resumen de la imagen:

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

En el ejemplo anterior, PROJECT-ID es el ID del proyecto de la consola de Google Cloud. Si el ID de tu proyecto contiene dos puntos (:), consulta Proyectos con alcance de dominio a continuación.

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

Consulta la información sobre cómo etiquetar imágenes para modificar las etiquetas.

Proyectos con alcance de dominio

Si tu proyecto tiene permisos para 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 reemplazar el carácter de dos puntos con una barra diagonal cuando especifiques el resumen de una imagen en Container Registry. Identifica las imágenes en estos tipos de proyectos con el siguiente formato:

HOSTNAME/[DOMAIN]/[PROJECT]/IMAGE

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

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

Nombres de registro como URL

La URL https://HOSTNAME/PROJECT-ID/IMAGE es una URL de una imagen en la consola de Google Cloud. Cualquier usuario autenticado que tenga permiso para acceder al host del registro puede usar vínculos a fin de ver las imágenes que almacene. Consulta Registros para obtener detalles sobre el formato de la ruta de acceso a la imagen.

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

Formatos de imagen del contenedor

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

Si quieres almacenar imágenes y otros tipos de artefactos de forma centralizada, considera usar Artifact Registry en lugar de Container Registry.

Control de acceso

Container Registry almacena sus etiquetas y archivos de capas para imágenes de contenedores en un bucket de Cloud Storage en el mismo proyecto que el registro. El acceso al bucket se establece con la configuración de la administración de identidades y accesos (IAM) de Cloud Storage.

Un usuario que tiene acceso a un host de registro puede acceder a cualquier imagen en el bucket de almacenamiento del host. Si necesitas un control de acceso más detallado, considera usar Artifact Registry. Artifact Registry proporciona control de acceso a nivel de repositorio.

De forma predeterminada, los Propietarios y Editores del proyecto tienen permiso para enviar y extraer en el bucket de Container Registry de ese proyecto. Los Visualizadores del proyecto solo tienen permiso para extraer.

Para obtener más información sobre los permisos de Container Registry, consulta Configura el control de acceso.

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

Authentication

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

Auxiliar de credenciales de Docker

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

El auxiliar de credenciales recupera tus credenciales de Container Registry, ya sea automáticamente o desde una ubicación especificada mediante la marca --token-source. Luego, las escribe en el archivo de configuración de Docker. De esta manera, 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 agrega 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 está diseñada específicamente para que Container Registry realice sus tareas de servicio en tu proyecto. Google administra esta cuenta, pero es específica para tu proyecto.

Si borras esta cuenta de servicio o cambias sus permisos, algunas características de Container Registry no funcionarán correctamente. No debes modificar las funciones ni borrar la cuenta.

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

Caché de extracción

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

El uso de imágenes en caché puede acelerar las extracciones desde Docker Hub. Tu cliente siempre busca 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 cómo extraer imágenes en caché almacenadas en Docker Hub.

Notificaciones

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

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

Usa 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 permisos de Cloud Storage en las instancias. Consulta cómo usar Container Registry con Google Cloud.

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

Integraciones en herramientas de entrega continua

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

Container Registry se integra perfectamente en los servicios de Google Cloud. Por ejemplo, Cloud Build puede enviar y extraer imágenes de los 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 en el mismo proyecto de forma predeterminada.

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

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