Administración del contenido público con Azure Container Registry

Este artículo es una introducción a los procedimientos y flujos de trabajo para usar un registro local, como un registro de contenedor de Azure para mantener copias del contenido público, como las imágenes de contenedor de Docker Hub.

Riesgos con el contenido público

El entorno puede tener dependencias del contenido público, como imágenes de contenedor público, gráficos Helm, directivas de agente de directiva abierta (OPA) u otros artefactos. Por ejemplo, podría ejecutar nginx para el enrutamiento de servicio o docker build FROM alpine mediante la extracción de imágenes directamente de Docker Hub u otro registro público.

Sin los controles adecuados, el hecho de tener dependencias del contenido del registro público puede introducir riesgos en los flujos de trabajo de desarrollo e implementación de imágenes. Para mitigar estos riesgos, mantenga copias locales del contenido público siempre que sea posible. Para más información, consulte el blog de Open Container Iniciative.

Autenticación con Docker Hub

Como primer paso, si actualmente extrae imágenes públicas de Docker Hub como parte de un flujo de trabajo de compilación o de implementación, se recomienda autenticarse con una cuenta de Docker Hub en lugar de realizar una solicitud de incorporación de cambios anónima.

Al realizar solicitudes de incorporación de cambios anónimas frecuentes, es posible que vea errores de Docker similares a ERROR: toomanyrequests: Too Many Requests. o You have reached your pull rate limit.. Autentíquese en Docker Hub para evitar estos errores.

Nota

Desde el 2 de noviembre de 2020, se aplican límites de frecuencia de descarga a las solicitudes anónimas y autenticadas a Docker Hub desde cuentas del plan gratuito de Docker y se aplican por dirección IP e identificador de Docker, respectivamente.

Al estimar el número de solicitudes de incorporación de cambios, tenga en cuenta que, si se usan servicios de proveedores de nube o se trabaja detrás de un proceso NAT corporativo, se presentarán varios usuarios a Docker Hub de forma agregada como un subconjunto de direcciones IP. La adición de autenticación de cuentas de pago de Docker a las solicitudes realizadas a Docker Hub evitará posibles interrupciones del servicio debido a la limitación de velocidad.

Para más información, consulte Precios y suscripciones de Docker y Términos de servicio de Docker.

Token de acceso de Docker Hub

Al autenticarse en Docker Hub, este admite tokens de acceso personal como alternativa a las contraseñas de Docker. Se recomienda el uso de tokens para los servicios automatizados que extraen imágenes de Docker Hub. Puede generar varios tokens para distintos usuarios o servicios, así como revocar los tokens cuando ya no los necesite.

Para autenticarse con docker login mediante un token, omita la contraseña en la línea de comandos. Cuando se le solicite una contraseña, escriba el token en su lugar. Si habilitó la autenticación en dos fases para la cuenta de Docker Hub, debe usar un token de acceso personal al iniciar sesión desde la CLI de Docker.

Autenticación desde servicios de Azure

Varios servicios de Azure, como App Service y Azure Container Instances, admiten la extracción de imágenes de registros públicos, como es el caso de Docker Hub para implementaciones de contenedores. Si necesita implementar una imagen de Docker Hub, se recomienda que configure las opciones para autenticarse con una cuenta de Docker Hub. Ejemplos:

App Service

  • Origen de imagen: Docker Hub
  • Acceso al repositorio: Privada
  • Inicio de sesión: <nombre de usuario de Docker Hub>
  • Contraseña: <token de Docker Hub>

Para más información, consulte Extracciones autenticadas de Docker Hub en App Service.

Azure Container Instances

  • Origen de imagen: Docker Hub u otro registro
  • Tipo de imagen: Privada
  • Servidor de inicio de sesión del registro de imágenes: docker.io
  • Nombre de usuario del registro de imágenes: <nombre de usuario de Docker Hub>
  • Contraseña del registro de imágenes: <token de Docker Hub>
  • Imagen: docker.io/<nombre de repositorio>:<etiqueta>

Configuración de Caché de artefacto para consumir contenido público

El procedimiento recomendado para consumir contenido público es combinar la autenticación del registro y la característica de Caché de artefacto. Puede usar Caché de artefacto para almacenar en caché los artefactos de contenedor en Azure Container Registry incluso en redes privadas. El uso de Caché de artefacto no solo protege frente a los límites de velocidad del registro, sino que aumenta drásticamente la confiabilidad de extracción cuando se combina con ACR con replicación geográfica para extraer artefactos de la región más cercana al recurso de Azure. Además, también puede usar todas las características de seguridad que ACR tiene para ofrecer, incluidas las redes privadas, la configuración del firewall, las entidades de servicio, etc. Para obtener información completa sobre el uso del contenido público con Caché de artefactos de ACR, consulte el tutorial de Caché de artefacto.

Importación de imágenes en una instancia de Azure Container Registry

Para empezar a administrar copias de imágenes públicas, puede crear un registro de contenedor de Azure si aún no tiene uno. Cree un registro con la CLI de Azure, Azure Portal, Azure PowerShell u otras herramientas.

Como paso único recomendado, importe imágenes base y otro contenido público en la instancia de Azure Container Registry. El comando az acr import de la CLI de Azure admite la importación de imágenes de registros públicos, como Docker Hub y Microsoft Container Registry, y desde otros registros de contenedores privados.

az acr import no requiere una instalación local de Docker. Puede ejecutarlo con una instalación local de la CLI de Azure o directamente en Azure Cloud Shell. Admite imágenes de cualquier tipo de sistema operativo, imágenes de varias arquitecturas o artefactos OCI, como los gráficos Helm.

En función de las necesidades de su organización, puede realizar la importación en un registro dedicado o en un repositorio de un registro compartido.

az acr import \
  --name myregistry \
  --source docker.io/library/hello-world:latest \
  --image hello-world:latest \
  --username <Docker Hub username> \
  --password <Docker Hub token>

Actualización de referencias de imágenes

Los desarrolladores de imágenes de aplicación deben asegurarse de que el código haga referencia al contenido local bajo su control.

  • Actualice las referencias de las imágenes para que usen el registro privado. Por ejemplo, actualice una instrucción FROM baseimage:v1 en un Dockerfile a FROM myregistry.azurecr.io/mybaseimage:v1
  • Configure las credenciales o un mecanismo de autenticación para usar el registro privado. El mecanismo exacto depende de las herramientas que use para acceder al registro y de cómo administre el acceso de los usuarios.

Automatización de las actualizaciones de imágenes de aplicación

Para ampliar la importación de imágenes, configure una tarea de Azure Container Registry para automatizar las compilaciones de imágenes de aplicación cuando se actualizan las imágenes base. Una tarea de compilación automatizada puede realizar un seguimiento de las actualizaciones de la imagen base y las actualizaciones del código fuente.

Para ver un ejemplo detallado, consulte Consumo y mantenimiento de contenido público con Azure Container Registry Tasks.

Nota

Una sola tarea preconfigurada puede recompilar automáticamente cada imagen de aplicación que haga referencia a una imagen base dependiente.

Pasos siguientes