Importación de imágenes de contenedor en un registro de contenedor

Puede importar (copiar) fácilmente imágenes de contenedor (copia) en un registro de contenedor de Azure, sin usar comandos de Docker. Por ejemplo, importar imágenes de un registro de desarrollo en un registro de producción, o copiar las imágenes base desde un registro público.

Azure Container Registry controla muchos escenarios comunes para copiar imágenes y otros artefactos de un registro existente:

  • Importación de imágenes desde un registro público

  • Importación de imágenes o artefactos OCI, incluidos los gráficos Helm 3 de otra instancia de Azure Container Registry, al mismo u otro inquilino o suscripción de Azure

  • Importación desde un registro de contenedor privado de Azure

La importación de imágenes en un registro de contenedor de Azure tiene las siguientes ventajas con respecto al uso de comandos de la CLI de Docker:

  • Si el entorno de cliente no necesita una instalación local de Docker, puede importar cualquier imagen de contenedor, independientemente del tipo de sistema operativo compatible.

  • Si importa imágenes de varias arquitecturas (por ejemplo, las imágenes oficiales de Docker), se copian las imágenes de todas las arquitecturas y plataformas especificadas en la lista de manifiesto.

  • Si accede al registro de destino, no tiene que usar el punto de conexión público del registro.

Importante

  • La importación de imágenes requiere que el registro externo admita RFC 7233. Se recomienda usar un registro que admita intervalos RFC 7233 al usar el comando az acr import con el URI del registro para evitar errores.

Limitaciones

  • El número máximo de manifiestos para una imagen importada es 50.
  • El tamaño máximo de capa para una imagen importada desde un registro público es de 2 GiB.

Para importar imágenes de contenedor, este artículo requiere que ejecute la CLI de Azure en Azure Cloud Shell o localmente (se recomienda la versión 2.0.55 o posterior). Ejecute az --version para encontrar la versión. Si necesita instalarla o actualizarla, vea Instalación de la CLI de Azure.

Nota

Si tiene que distribuir imágenes de contenedor idénticas en varias regiones de Azure, Azure Container Registry también admite la replicación geográfica. Mediante la replicación geográfica de un registro (es necesario el nivel de servicio Premium), puede atender varias regiones con nombres idénticos de imagen y etiqueta desde un único registro.

Importante

Se han producido cambios en la importación de imágenes entre dos registros de contenedor de Azure a partir de enero de 2021:

  • La importación hacia un registro de contenedor de Azure con restricción de red, o desde este, requiere que el registro restringido permita el acceso por parte de servicios de confianza para omitir la red. De forma predeterminada, la opción está habilitada, lo que permite la importación. Si el valor no está habilitado en un registro recién creado con un punto de conexión privado o con reglas de firewall de registro, se producirá un error en la importación.
  • En un registro de contenedor de Azure con restricción de red existente que se use como origen o destino de la importación, la habilitación de esta característica de seguridad de red es opcional pero recomendable.

Requisitos previos

Si aún no tiene un registro de contenedor de Azure, cree un registro. Para obtener instrucciones, consulte Guía de inicio rápido: Creación de un registro de contenedor privado con la CLI de Azure.

Para importar una imagen en un registro de contenedor de Azure, la identidad debe tener permisos de escritura en el registro de destino (al menos el rol de colaborador o un rol personalizado que permita realizar la acción importImage). Consulte Roles y permisos de Azure Container Registry.

Importación desde un registro público

Importante

Para importar desde un registro público a un registro de contenedor de Azure restringido por la red, es necesario que el registro restringido permita el acceso por parte de servicios de confianza para omitir la red. La configuración está habilitada de manera predeterminada, por lo que permite la importación. Si el valor no está habilitado en un registro recién creado con un punto de conexión privado o con reglas de firewall de registro, se producirá un error en la importación.

Importación desde Docker Hub

Por ejemplo, use el comando az acr import para importar la imagen hello-world:latest de varias arquitecturas desde Docker Hub en un registro denominado myregistry. Dado que hello-world es una imagen oficial de Docker Hub, esta imagen está en el repositorio library predeterminado. Incluya el nombre del repositorio y, opcionalmente, una etiqueta en el valor del parámetro de imagen --source. (Puede, opcionalmente, identificar una imagen por su hash de manifiesto en vez de por etiqueta, lo que garantiza una versión determinada de una imagen).

az acr import \
  --name myregistry \
  --source docker.io/library/hello-world:latest \
  --image hello-world:latest

Para comprobar que varios manifiestos estén asociados a esta imagen, ejecute el comando az acr manifest list-metadata:

az acr manifest list-metadata \
  --name hello-world \
  --registry myregistry

Para importar un artefacto de forma implícita sin agregar una etiqueta:

az acr import \
   --name myregistry \
   --source docker.io/library/hello-world@sha256:abc123 \
   --repository hello-world

Si tiene una cuenta de Docker Hub, se recomienda usar las credenciales al importar una imagen desde Docker Hub. Pase el nombre de usuario y la contraseña de Docker Hub o un token de acceso personal como parámetros a az acr import. En el siguiente ejemplo se importa una imagen pública del repositorio tensorflow en Docker Hub mediante las credenciales de este:

az acr import \
  --name myregistry \
  --source docker.io/tensorflow/tensorflow:latest-gpu \
  --image tensorflow:latest-gpu
  --username <Docker Hub user name>
  --password <Docker Hub token>

Importación desde el Registro de contenedor de Microsoft

Por ejemplo, importe la imagen de Windows Server Core ltsc2019 del repositorio de windows en Microsoft Container Registry.

az acr import \
--name myregistry \
--source mcr.microsoft.com/windows/servercore:ltsc2019 \
--image servercore:ltsc2019

Importación de un registro de contenedor de Azure del mismo inquilino de AD

Puede importar una imagen desde un registro de contenedor de Azure del mismo inquilino de AD con los permisos integrados de Microsoft Entra.

  • La identidad debe tener permisos de Microsoft Entra para leer desde el registro de origen (rol de lector) e importar en el registro de destino (rol de colaborador o un rol personalizado que permita realizar la acción importImage).

  • El registro puede estar en la misma suscripción de Azure, u otra diferente, en el mismo inquilino de Active Directory.

  • El acceso público al registro de origen puede estar deshabilitado. Si el acceso público está deshabilitado, use el identificador del recurso para especificar el registro de origen, en lugar del nombre del servidor de inicio de sesión del registro.

  • El registro de origen o el registro de destino con un punto de conexión privado o reglas de firewall de registro deben garantizar que el registro restringido permite que los servicios de confianza accedan a la red.

Importación desde un registro en la misma suscripción

Por ejemplo, importe la imagen aci-helloworld:latest desde un registro de origen mysourceregistry a myregistry en la misma suscripción de Azure.

az acr import \
  --name myregistry \
  --source mysourceregistry.azurecr.io/aci-helloworld:latest \
  --image aci-helloworld:latest

En el ejemplo siguiente se importa la imagen aci-helloworld:latest a myregistry desde el registro de origen mysourceregistry, en el que está deshabilitado el acceso al punto de conexión público del registro. Proporcione el identificador de recurso del registro de origen con el parámetro --registry. Tenga en cuenta que el parámetro --source especifica solo el repositorio de origen y el nombre de la imagen, no el nombre del servidor de inicio de sesión del registro.

az acr import \
  --name myregistry \
  --source aci-helloworld:latest \
  --image aci-helloworld:latest \
  --registry /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/sourceResourceGroup/providers/Microsoft.ContainerRegistry/registries/mysourceregistry

En el ejemplo siguiente se importa una imagen mediante el hash del manifiesto (hash de SHA-256, representado como sha256:...) en lugar de mediante etiqueta:

az acr import \
  --name myregistry \
  --source mysourceregistry.azurecr.io/aci-helloworld@sha256:123456abcdefg

Importación desde un registro en una suscripción distinta

Nota:

Para importar una imagen de un registro a otro, los registros de origen y de destino deben asegurarse de que ambas regiones están registradas para Azure Container Registry (ACR) en los proveedores de recursos de la suscripción.

En el ejemplo siguiente, mysourceregistry está en una suscripción diferente de myregistry en el mismo inquilino de Active Directory. Proporcione el identificador de recurso del registro de origen con el parámetro --registry. Tenga en cuenta que el parámetro --source especifica solo el repositorio de origen y el nombre de la imagen, no el nombre del servidor de inicio de sesión del registro.

az acr import \
  --name myregistry \
  --source aci-helloworld:latest \
  --image aci-hello-world:latest \
  --registry /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/sourceResourceGroup/providers/Microsoft.ContainerRegistry/registries/mysourceregistry

Importación desde un registro con credenciales de entidad de servicio

Para importar desde un registro al que no se puede acceder mediante los permisos integrados de Active Directory, puede usar credenciales de entidad de servicio (si están disponibles) para el registro de origen. Proporcione el appID y la contraseña de la entidad de servicio de Active Directory que tiene acceso ACRPull al registro de origen. El uso de una entidad de servicio es útil para sistemas de compilación y otros sistemas desatendidos que deban importar imágenes en el registro.

az acr import \
  --name myregistry \
  --source sourceregistry.azurecr.io/sourcerrepo:tag \
  --image targetimage:tag \
  --username <SP_App_ID> \
  --password <SP_Passwd>

Importación de un registro de contenedor de Azure de otro inquilino de AD

Para importar desde un registro de contenedor de Azure de otro inquilino de Microsoft Entra, especifique el registro de origen mediante el nombre del servidor de inicio de sesión y proporcione las credenciales que permiten el acceso de extracción al registro.

Importación entre inquilinos con nombre de usuario y contraseña

Por ejemplo, use un token de ámbito de repositorio y la contraseña, o el appID y la contraseña de una entidad de servicio de Active Directory que tenga acceso ACRPull al registro de origen.

az acr import \
  --name myregistry \
  --source sourceregistry.azurecr.io/sourcerrepo:tag \
  --image targetimage:tag \
  --username <SP_App_ID> \
  --password <SP_Passwd>

Importación entre inquilinos con token de acceso

Para acceder al registro de origen mediante una identidad en el inquilino de origen que tiene permisos de registro, puede obtener un token de acceso:

# Login to Azure CLI with the identity, for example a user-assigned managed identity
az login --identity --username <identity_ID>

# Get access token returned by `az account get-access-token`
az account get-access-token

En el inquilino de destino, pase el token de acceso como contraseña al comando az acr import. El registro de origen especifica el nombre del servidor de inicio de sesión. Observe que no se necesita ningún nombre de usuario en este comando:

az acr import \
  --name myregistry \
  --source sourceregistry.azurecr.io/sourcerrepo:tag \
  --image targetimage:tag \
  --password <access-token>

Nota:

Entre inquilinos no funciona en las nubes. Tampoco se admite la importación entre inquilinos desde puntos de conexión privados.

Importación desde un registro de contenedor privado de Azure

Importe una imagen desde un registro privado que no sea de Azure mediante la especificación de credenciales que permitan el acceso de extracción al registro. Por ejemplo, extraiga una imagen de un registro privado de Docker:

az acr import \
  --name myregistry \
  --source docker.io/sourcerepo/sourceimage:tag \
  --image sourceimage:tag \
  --username <username> \
  --password <password>

Pasos siguientes

En este artículo, ha aprendido sobre la importación de imágenes de contenedor en un registro de contenedor de Azure desde un registro público u otro registro privado.

  • Para obtener opciones de importación de imágenes adicionales, vea la referencia del comando az acr import.