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

Container Registry es un registro de imágenes de contenedor privado que se ejecuta en Google Cloud. Container Registry es compatible con Docker Image Manifest V2 y los formatos de imagen de OCI.

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

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

Registros

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 en 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 según 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

donde 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.

Considera el siguiente ejemplo:

us.gcr.io/builds/dev/web-app:beta-2.0
us.gcr.io/builds/stable/web-app:1.0

Hay dos imágenes llamadas web-app en el proyecto builds. Uno está en un repositorio de dev y el otro, en un repositorio de stable. Con esta estructura, puedes almacenar diferentes versiones de una imagen para admitir diferentes etapas de desarrollo o equipos diferentes.

Si es necesario, puedes anidar repositorios. En este ejemplo, dos productos separados tienen un repositorio de nivel superior con repositorios secundarios debajo de ellos.

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

Los repositorios son una ayuda de la organización. Funcionan 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.

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:

  • agrega la etiqueta de la imagen:

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

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

donde 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 muestra una lista de 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 ese registro en Cloud Console. Los usuarios autenticados que tengan permiso para acceder al registro pueden visitar estos vínculos. En la sección que aparece con anterioridad, encontrarás información sobre cómo crear el nombre de registro.

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.

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.

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, consulta Configurar 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 herramienta de línea de comandos de gcloud 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 nombre:

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 es el propietario de esta cuenta, pero es específica para tu proyecto y está incluida en las secciones de IAM y Cuentas de servicio de Cloud Console.

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.

Caché de extracción

El registro mirror.gcr.io almacena en caché imágenes públicas que se solicitan con frecuencia de los repositorios oficiales de 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 varios sistemas de entrega continua populares.

Usa Container Registry con soluciones de terceros

Cuando desarrollas tus aplicaciones, es posible que desees usar administración de clústeres, integración continua, o bien otras soluciones de terceros que están fuera de Google Cloud. Container Registry se puede integrar en estos servicios externos.

Es posible que estas soluciones no brinden acceso a la herramienta de línea de comandos de gcloud para la autenticación. En esos casos, puedes usar docker login para autenticar directamente con Container Registry. Para obtener más información, consulta Autenticación avanzada.

Para obtener una lista de las soluciones de terceros que se integran con Container Registry, consulta Integraciones de la herramienta de entrega continua.