Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Cuando se usa un registro de contenedor de Azure como parte de un flujo de trabajo de desarrollo, el registro puede rellenar rápidamente imágenes u otros artefactos que no sean necesarios después de un breve período. Es posible que quiera eliminar todas las etiquetas que tengan más de una duración determinada o que coincidan con un filtro de nombre especificado.
Para eliminar varios artefactos rápidamente, use el acr purge comando . Puede ejecutarse acr purge como una tarea ACR a petición o programada .
Importante
acr purge está actualmente en versión preliminar.
Consulte los términos Supplementales de uso para las versiones preliminares de Microsoft Azure para conocer los términos legales que se aplican a las características de Azure que se encuentran en versión beta, versión preliminar o, de lo contrario, aún no se han publicado en disponibilidad general.
El comando acr purge (versión preliminar) se distribuye actualmente en una imagen de contenedor pública (mcr.microsoft.com/acr/acr-cli:0.19), compilada a partir del código fuente en el repositorio acr-cli en GitHub.
Use el Azure Cloud Shell o una instalación local del CLI de Azure para ejecutar los ejemplos de tareas de ACR de este artículo. Para instalar o actualizar, consulte Install CLI de Azure.
Advertencia
Use el acr purge comando con precaución: los datos de imagen eliminados no son irrecuperables. Si tiene sistemas que extraen imágenes por resumen de manifiesto (en lugar de por el nombre de la imagen), no purgue imágenes sin etiqueta. La eliminación de imágenes sin etiqueta impide que esos sistemas extraen imágenes del registro. En lugar de extraer por manifiesto, considere la posibilidad de adoptar un esquema de etiquetado único.
Para eliminar etiquetas o manifiestos de imagen única mediante comandos CLI de Azure, consulte Delete container images in Azure Container Registry.
Uso del comando de purga
El acr purge comando elimina imágenes por etiqueta en un repositorio. Elimina todas las imágenes que coinciden con un filtro de nombre y son anteriores a una duración especificada. De forma predeterminada, el comando elimina solo las referencias de etiqueta, no los manifiestos subyacentes y los datos de capa. El comando también tiene una opción para eliminar manifiestos.
Nota
acr purge no elimina una etiqueta de imagen ni un repositorio si el atributo write-enabled está establecido en false. Para obtener más información, consulte Cerrar una imagen de contenedor en un registro de contenedores de Azure.
acr purge está diseñado para ejecutarse como un comando de contenedor en una tarea de ACR. Se autentica automáticamente con el Registro donde se ejecuta la tarea y realiza acciones allí. En los ejemplos de tareas de este artículo se usa el comando alias de comando acr purgealias en lugar de un comando de imagen de contenedor completo.
Importante
El comando estándar para ejecutar el acr purge comando es az acr run --registry <YOUR_REGISTRY> --cmd 'acr purge --optional parameter' /dev/null.
Se recomienda ejecutar el comando completo acr purge . Por ejemplo, ejecute acr purge --help como az acr run --registry <YOUR_REGISTRY> --cmd 'acr purge --help' /dev/null.
Como mínimo, especifique las siguientes opciones al ejecutar acr purge:
-
--filter- Una expresión regular de nombre de repositorio y una expresión regular de nombre de etiqueta para filtrar imágenes en el Registro. Por ejemplo,--filter "hello-world:.*"coincide con todas las etiquetas delhello-worldrepositorio,--filter "hello-world:^1.*"coincide con las etiquetas que comienzan por1en elhello-worldrepositorio y--filter ".*/cache:.*"coinciden con todas las etiquetas de los repositorios que terminan en/cache. También puede pasar varios parámetros--filter. -
--ago- Cadena de duración de estilo Go que indica una duración más allá de la cual se eliminan las imágenes. La duración consta de una secuencia de uno o más números decimales, cada uno con un sufijo de unidad. Las unidades de tiempo válidas incluyen "d" para los días, "h" para las horas y "m" para los minutos. Por ejemplo,--ago 2d3h6mselecciona todas las imágenes filtradas modificadas por última vez hace más de dos días, 3 horas y 6 minutos, y--ago 1.5hselecciona las imágenes modificadas por última vez hace más de 1,5 horas.
acr purge admite varios parámetros opcionales:
-
--untagged- Elimina todos los manifiestos que no tienen etiquetas asociadas (manifiestos sin etiquetar). Este parámetro elimina manifiestos sin etiquetar además de etiquetas que el comando ya elimina. Quite todas las etiquetas asociadas a un manifiesto para purgarla; solo puede purgar un manifiesto sin etiquetas mediante--untagged.
Nota
El parámetro --untagged respeta el filtro de duración --ago que comienza con mcr.microsoft.com/acr/acr-cli:0.17.
-
--dry-run: especifica que no se elimina ningún dato, pero el comando genera la misma salida que si el comando se ejecuta sin esta marca. Este parámetro es útil para probar un comando de purga para asegurarse de que no elimina accidentalmente los datos que quiere conservar. -
--keep: especifica que se conservará el número más reciente de etiquetas que se van a eliminar por repositorio. Las etiquetas más recientes se determinan por la hora de última modificación de la etiqueta para cada repositorio coincidente con las opciones proporcionadas--filter. -
--concurrency: especifica un número de tareas de purga que se van a procesar de forma simultánea. -
--untagged-only- Elimina solo manifiestos sin etiquetar (manifiestos pendientes que no tienen etiquetas) sin eliminar primero ninguna etiqueta. A diferencia del flujo estándaracr purge, que requiere--filtery--ago, esta marca hace que esos parámetros sean opcionales. Sin--filter, examina todos los repositorios. Puede combinarlo con--agopara filtrar por edad y con--keeppara conservar un número de manifiestos recientes sin etiquetar.
Para obtener información sobre parámetros adicionales, ejecute acr purge --help.
acr purge admite otras características de los comandos ACR Tasks, incluidas las variables de ejecución y los registros de ejecución de tareas que se transmiten y también se guardan para la recuperación posterior.
Ejecución del comando de purga en una tarea a petición
En el ejemplo siguiente se usa el comando az acr run para ejecutar el comando acr purge a petición. En este ejemplo se eliminan todas las etiquetas de imagen y los manifiestos asociados en el repositorio hello-world de myregistry que se modificaron hace más de 1 día. También elimina los manifiestos sin etiquetar, que ahora respetan el mismo filtro de duración --ago que las imágenes etiquetadas. El comando de contenedor se pasa mediante una variable de entorno y la tarea se ejecuta sin un contexto de origen.
# Environment variable for container command line
PURGE_CMD="acr purge --filter 'hello-world:.*' \
--untagged --ago 1d"
az acr run \
--cmd "$PURGE_CMD" \
--registry myregistry \
/dev/null
Ejecución del comando de purga en una tarea programada
En el ejemplo siguiente se usa el comando az acr task create para crear una instancia de ACR Tasks programada diariamente. La tarea purga las etiquetas modificadas hace más de siete días en el hello-world repositorio. El comando de contenedor se pasa mediante una variable de entorno. La tarea se ejecuta sin un contexto de origen.
# Environment variable for container command line
PURGE_CMD="acr purge --filter 'hello-world:.*' \
--ago 7d"
az acr task create --name purgeTask \
--cmd "$PURGE_CMD" \
--schedule "0 0 * * *" \
--registry myregistry \
--context /dev/null
Ejecute el comando az acr task show para ver que el desencadenador de temporizador está configurado.
Purga de un gran número de etiquetas y manifiestos
La purga de un gran número de etiquetas y manifiestos puede tardar varios minutos o más. Para purgar miles de etiquetas y manifiestos, es posible que el comando tenga que ejecutarse más tiempo que el tiempo de espera predeterminado de 600 segundos en el caso de una tarea bajo demanda, o 3,600 segundos para una tarea programada. Si el comando agota el tiempo de espera, el proceso elimina solo un subconjunto de etiquetas y manifiestos. Para asegurarse de que se ha completado una purga a gran escala, pase el parámetro --timeout para aumentar el valor.
Por ejemplo, la siguiente tarea a petición establece un tiempo de espera de 3600 segundos (una hora):
# Environment variable for container command line
PURGE_CMD="acr purge --filter 'hello-world:.*' \
--ago 1d --untagged"
az acr run \
--cmd "$PURGE_CMD" \
--registry myregistry \
--timeout 3600 \
/dev/null
Ejemplo: Purga programada de varios repositorios en un registro
Este ejemplo se describe mediante el uso de acr purge para limpiar periódicamente varios repositorios en un registro. Por ejemplo, podría tener una canalización de desarrollo que inserte imágenes en los repositorios samples/devimage1 y samples/devimage2. Las imágenes de desarrollo se importan periódicamente en un repositorio de producción para las implementaciones, por lo que dichas imágenes ya no se necesitan. Con una periodicidad semanal, se purgan los repositorios samples/devimage1 y samples/devimage2 para preparar el trabajo de la semana próxima.
Versión preliminar de la purga
Antes de eliminar datos, ejecute una tarea de purga a petición mediante el --dry-run parámetro . Esta opción muestra las etiquetas y manifiestos que el comando purga, sin quitar ningún dato.
En el ejemplo siguiente, el filtro de cada repositorio selecciona todas las etiquetas. El parámetro --ago 0d hace coincidir las imágenes de cualquier antigüedad de los repositorios que coinciden con los filtros. Modifique los criterios de selección según sea necesario para su escenario. El parámetro --untagged indica que se eliminen los manifiestos además de las etiquetas. El comando contenedor se pasa al comando az acr run mediante una variable de entorno.
# Environment variable for container command line
PURGE_CMD="acr purge \
--filter 'samples/devimage1:.*' --filter 'samples/devimage2:.*' \
--ago 0d --untagged --dry-run"
az acr run \
--cmd "$PURGE_CMD" \
--registry myregistry \
/dev/null
Revise la salida del comando para ver las etiquetas y los manifiestos que coinciden con los parámetros de selección. Dado que el comando usa --dry-run, no se elimina ningún dato.
Salida del ejemplo:
[...]
Deleting tags for repository: samples/devimage1
myregistry.azurecr.io/samples/devimage1:232889b
myregistry.azurecr.io/samples/devimage1:a21776a
Deleting manifests for repository: samples/devimage1
myregistry.azurecr.io/samples/devimage1@sha256:81b6f9c92844bbbb5d0a101b22f7c2a7949e40f8ea90c8b3bc396879d95e788b
myregistry.azurecr.io/samples/devimage1@sha256:3ded859790e68bd02791a972ab0bae727231dc8746f233a7949e40f8ea90c8b3
Deleting tags for repository: samples/devimage2
myregistry.azurecr.io/samples/devimage2:5e788ba
myregistry.azurecr.io/samples/devimage2:f336b7c
Deleting manifests for repository: samples/devimage2
myregistry.azurecr.io/samples/devimage2@sha256:8d2527cde610e1715ad095cb12bc7ed169b60c495e5428eefdf336b7cb7c0371
myregistry.azurecr.io/samples/devimage2@sha256:ca86b078f89607bc03ded859790e68bd02791a972ab0bae727231dc8746f233a
Number of deleted tags: 4
Number of deleted manifests: 4
[...]
Programación de la purga
Después de verificar que la simulación funciona según lo esperado, cree una tarea programada para automatizar la purga. En el siguiente ejemplo se programa una tarea semanal el domingo a la 1:00 UTC para ejecutar el comando de purga anterior:
# Environment variable for container command line
PURGE_CMD="acr purge \
--filter 'samples/devimage1:.*' --filter 'samples/devimage2:.*' \
--ago 0d --untagged"
az acr task create --name weeklyPurgeTask \
--cmd "$PURGE_CMD" \
--schedule "0 1 * * Sun" \
--registry myregistry \
--context /dev/null
Ejecute el comando az acr task show para ver que el desencadenador de temporizador está configurado.
Ejemplo de purgar solo manifiestos sin etiquetar
A veces, es posible que quiera quitar solo manifiestos sin etiquetar sin que afecte a ninguna imagen etiquetada. Para ello, use un filtro de repositorio que no coincida con ningún nombre de etiqueta, como ^$. Esto hace que acr purge omita todas las etiquetas y evalúe solo los manifiestos sin etiquetar.
# Environment variable for container command line
PURGE_CMD="acr purge \
--filter 'samples/devimage1:^$' --filter 'samples/devimage2:^$' \
--ago 0d --untagged"
az acr task create --name weeklyPurgeTask \
--cmd "$PURGE_CMD" \
--schedule "0 1 * * Sun" \
--registry myregistry \
--context /dev/null
Ejemplo: Purgar solo manifiestos sin etiquetar con --untagged-only
La --untagged-only marca proporciona una manera más sencilla de limpiar los manifiestos pendientes sin eliminar etiquetas. A diferencia de --untagged, que elimina manifiestos no etiquetados además de eliminar etiquetas, --untagged-only omite por completo la eliminación de etiquetas.
Para eliminar todos los manifiestos sin etiqueta de todos los repositorios del registro:
PURGE_CMD="acr purge --untagged-only"
az acr run \
--cmd "$PURGE_CMD" \
--registry myregistry \
/dev/null
Purgar en registros habilitados con ABAC
Los registros con Control de acceso basado en atributos (ABAC) habilitado usan permisos de ámbito de repositorio en lugar de roles para todo el registro. El acr purge comando detecta automáticamente los registros habilitados para ABAC y ajusta su autenticación; no se necesitan marcas adicionales.
Dado que los registros de ABAC no admiten ámbitos de token comodín, acr purge procesa repositorios en lotes (valor predeterminado: 10). Para cada lote, se solicita un nuevo token de acceso con ámbito solo a esos repositorios.
Permisos necesarios
| Permiso | Función | Ámbito |
|---|---|---|
| Lista de repositorios | Container Registry Repository Catalog Lister |
Registry |
| Leer, eliminar y administrar etiquetas y manifiestos | Container Registry Repository Contributor |
Por repositorio |
Nota
Puede usar condiciones de ABAC para limitar el rol Container Registry Repository Contributor a repositorios específicos —por ejemplo, conceder permiso de eliminación solo a samples/*.
Purgar sin permisos de lista
Si su identidad no tiene permisos de Container Registry Repository Catalog Lister, aún puede purgar etiquetas y manifiestos dentro de un solo repositorio especificándolo directamente en la opción --filter. Dado que el nombre del repositorio es explícito, acr purge no es necesario enumerar los repositorios. Por ejemplo:
PURGE_CMD="acr purge --filter 'hello-world:.+' \
--ago 1d"
az acr run \
--cmd "$PURGE_CMD" \
--registry myregistry \
/dev/null
En este caso, solo se requiere el Container Registry Repository Contributor rol (o permisos de lectura y eliminación equivalentes) en el repositorio de destino.
Comportamiento de acceso parcial
Si --filter coincide con repositorios que su identidad no puede purgar, el comando se detiene en el primer repositorio no autorizado e informa de qué repositorios se completaron, cuáles fallaron y cuáles aún no se habían procesado.
Sugerencia
Usa un --filter específico que apunte solo a los repositorios a los que tu identidad tiene acceso. Por ejemplo, usa --filter 'samples/.*:.*' en lugar de --filter '.*:.*'.
Pasos siguientes
Obtenga información sobre otras opciones para eliminar datos de imágenes en Azure Container Registry.
Para obtener más información sobre el almacenamiento de imágenes, consulte Container image storage in Azure Container Registry.