Artifact Registry es el servicio recomendado para administrar imágenes de contenedor. Container Registry sigue siendo compatible, pero solo recibirá correcciones de seguridad críticas. Obtén más información sobre la transición a Artifact Registry.

Descripción general de Container Registry

Google Cloud tiene dos servicios para almacenar y administrar imágenes de contenedores:

Artifact Registry (recomendado)
Es un servicio para almacenar y administrar artefactos en repositorios privados, incluidas las imágenes de contenedores, los gráficos de Helm y los paquetes de lenguajes.

Artifact Registry extiende las capacidades de Container Registry. Además de admitir varios formatos de artefactos, el servicio proporciona beneficios adicionales como los siguientes:

  • Asistencia regional y multirregional
  • Capacidad de crear varios repositorios discretos en la misma región o multirregión con control de acceso a nivel del repositorio
  • Funciones de Identity and Access Management específicas del servicio, con una separación clara de la administración de repositorios y los permisos de los usuarios del repositorio
Container Registry

Es un registro de imágenes de contenedor privado que admite formatos de imagen de Docker Image Manifest V2 y OCI. Proporciona un subconjunto de funciones de Artifact Registry.

Aunque Container Registry aún está disponible y es compatible con la API de Google Enterprise, las funciones nuevas solo estarán disponibles en Artifact Registry. Container Registry solo recibirá correcciones de seguridad críticas.

Para obtener una comparación entre Container Registry y Artifact Registry y la información sobre la transición de Container Registry a Artifact Registry, consulta Transición desde Container Registry.

Cómo trabajar con sus imágenes

Muchas personas usan Docker Hub como 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 hardware propio.

Registros

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

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 depósito de almacenamiento independiente de las imágenes alojadas por gcr.io.
    • eu.gcr.io aloja las imágenes dentro de 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 de tu proyecto de Google Cloud Console. 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 Google Cloud Console, los registros del proyecto se enumeran por nombre de 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 Google Cloud Console.

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 us.gcr.io del host 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 de acceso 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 del repositorio o de la imagen.

Si necesitas un control de acceso más detallado, puedes usar Artifact Registry. En Artifact Registry, los repositorios son recursos discretos, por lo que puedes aplicar políticas de IAM separadas a 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 o el resumen de la imagen.

  • 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:

  • agregue 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 Google Cloud Console. Si el ID de tu proyecto contiene dos puntos (:), consulta Proyectos con alcance de dominio a continuación.

En Cloud Console, en la columna Etiquetas de la pantalla Imágenes, se enumeran las etiquetas de 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 para una imagen en Cloud Console. Cualquier usuario autenticado que tenga permiso para acceder al host del registro puede usar vínculos a fin de ver cualquier imagen almacenada. Consulta Registros para obtener detalles sobre el formato de la ruta de acceso de la imagen.

Por ejemplo, las siguientes URL vinculan a registros públicos en Cloud Console:

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 deseas almacenar imágenes y otros tipos de artefactos de manera centralizada, te recomendamos 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 depósito 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, procura 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.

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 a fin de autenticar solicitudes en Container Registry. Container Registry también admite métodos de autenticación avanzada mediante 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 los sistemas de integración continua y entrega continua más populares, incluidos Cloud Build y herramientas de terceros como Jenkins.

Container Registry se integra sin problemas a los servicios de Google Cloud. 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 en el mismo proyecto de forma predeterminada.

Como alternativa, puedes usar herramientas de terceros como Jenkins para compilar, extraer y enviar tus imágenes. Cuando usas una herramienta de terceros, debes configurar los permisos y la autenticación para 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.