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.
- Integra el registro a los servicios de CI/CD de Google Cloud o tus herramientas de CI/CD existentes.
- Almacenar imágenes de contenedor de Cloud Build
- Implementa imágenes de contenedor en los entornos de ejecución de Google Cloud, incluidos Google Kubernetes Engine, Cloud Run, Compute Engine y el entorno flexible de App Engine.
- La administración de identidades y accesos proporciona credenciales y control de acceso coherentes.
- Protege tu cadena de suministro de software de contenedores.
- Administra los metadatos de los contenedores y busca vulnerabilidades con Artifact Analysis.
- Aplica políticas de implementación con la autorización binaria.
- Protege el registro en un perímetro de seguridad de Controles del servicio de VPC.
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 porgcr.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.
- Actualmente,
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 predeterminadalatest
. 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 yrelease-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:
- https://gcr.io/google-appengine/python
- https://gcr.io/google-containers/pause
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.