Cleaner de Registro Docker simple escrito en Python que utiliza el Docker Registry HTTP API V2.
Docker Registry Cleaner es una aplicación de línea de comando diseñada para limpiar automáticamente las imágenes de Docker antiguas de un registro de Docker. Proporciona una forma flexible y configurable de definir trabajos de limpieza basados en varios criterios.
El limpiador de registro Docker se puede instalar y ejecutar con Python 3.11 o superior. Siga los pasos a continuación para instalar y ejecutar la aplicación:
Clone el repositorio o descargue el código fuente del repositorio de GitHub.
Instale las dependencias requeridas ejecutando el siguiente comando o simplemente use la herramienta Pipenv :
pip install -r requirements.txt
Todas las dependencias, incluida la Dev
pip install -r requirements.all.txt
El limpiador del registro Docker requiere 3 archivos de configuración: config/config.yaml , config/jobs.yaml y config/manual.yaml .
Se pueden encontrar ejemplos en el repositorio
Exmaple:
# Your docker registry url.
registry_url : https://your.registry.com/
# Environment variables works only for username, password and proxy
# Format: <field>: "__ENV: <YOUR_ENV_NAME>"
# or you can use strings
# username: your_username
username : " __ENV: ENV_VAR_NAME "
password : " __ENV: ENV_VAR_NAME2 "
# Optional; Format: <scheme>://[username:password@]<address>[:port]
proxy : " __ENV: PROXY "
# Optional, default 20, max 120, min 1
timeout : 20
# Optional; default 20
max_concurrent_requests : 20registry_url : la URL del registro de Docker que se limpiará.username : el nombre de usuario utilizado para la autenticación con el registro Docker.password : la contraseña utilizada para la autenticación con el registro Docker.max_concurrent_requests : el número máximo de solicitudes concurrentes que la aplicación puede hacer en el registro. Valor predeterminado: 20.proxy : la URL del servidor proxy que se utilizará para realizar solicitudes en el registro. Si no es necesario, deje en blanco o elimine.timeout : el tiempo de espera para cada solicitud HTTP en segundos. Valor predeterminado: 20.username , registry y proxy se pueden establecer utilizando variables de entorno, como se muestra en el ejemplo Una lista de trabajos de limpieza definidos en jobs.yaml . Cada trabajo se define por los siguientes parámetros:
- name : clean-dev-tags
# Optional
description : Clean dev tags every 24 hours
# List of repositories to clean
# You can use regular expression to match multiple repositories
# Format: r/regexp/
repositories :
- r/^base-w+$/
- scheduler-dev
- admin-panel-dev
# Pythonic regular expressions to match the tag name
# Be careful using this. Check your regexp at https://regex101.com/
tag_regexps :
- v5.d+.d+-dev$
- develop-[dw]+$
# Do not delete the last n tags, even
# if they are older than the specified number of days
save_last : 5
# Perform checks and do cleanup every x hours
clean_every_n_hours : 24
# Delete tags if their creation date is older than y days
older_than_days : 5name : El nombre del trabajo.description : Una descripción opcional del trabajo.repositories : matriz de cadenas de nombres de nombres de repositorio y nombres para limpiar imágenes.tag_regexps : matriz de cadenas de expresiones regulares para coincidir con etiquetas en los repositorios. Solo las etiquetas que coinciden con estos patrones regex se considerarán para la limpieza. Tenga cuidado cuando use esta opción. Consulte su regexp en https://regex101.com/save_last : el número de las últimas etiquetas que se guardará (excluidas de la limpieza) en cada repositorio.clean_every_n_hours : el intervalo en horas entre las ejecuciones de limpieza sucesivas para este trabajo.older_than_days : la edad en días posteriores a la cual las etiquetas se considerarán para la limpieza. Las etiquetas se agrupan mediante expresiones regulares, con cada expresión regular que representa un grupo diferente. Si necesita guardar las últimas 5 etiquetas para release-xx-dev y release-xx de forma independiente, pero su expresión regular puede coincidir con ambos tipos de etiquetas, terminará con una matriz mixta que contiene 5 etiquetas release-xx-dev y release-xx . Para evitar esta situación, debe agregar dos expresiones regulares diferentes para que coincidan con release-xx y release-xx-dev de forma independiente.
Diferencias de jobs.yaml :
--jobs , que le permite especificar los trabajos declarados en manual.yaml .Use el siguiente comando para ejecutar el limpiador del registro Docker:
python main.py [OPTIONS]
$ python -h
usage: main.py [-h] [--debug] [--watch] [--jobs JOBS [JOBS ...]] [--http-logs]
Automatic cleaner of old docker images
options:
-h, --help show this help message and exit
--debug The application will generate logs without actually deleting the images
--watch Endless operation of the application for auto cleanup. Will be used 'config.yaml'
--jobs JOBS [JOBS ...]
List of jobs in `manual.yaml` to run. Example: --jobs clean-dev-tags clean-prod-older-15
--http-logs Enable http logs for every request
El limpiador del registro Docker acepta las siguientes opciones:
--debug : si se proporciona, la aplicación generará registros sin eliminar realmente las imágenes. Use esta opción si necesita verificar las imágenes que eliminará la aplicación--watch : si se proporciona, la aplicación se ejecutará en un bucle interminable, ejecutando periódicamente trabajos de limpieza en función de la configuración en config.yaml .--jobs : una lista de nombres de trabajo definidos en manual.yaml que desea ejecutar. Por ejemplo: --jobs clean-dev-tags clean-prod-older-15 .--http-logs : si se proporciona, los registros HTTP se habilitarán para cada solicitud realizada por la aplicación. Si ha estado utilizando la aplicación con la opción --debug y necesita activar el proceso de limpieza de inmediato, es posible que deba limpiar el latest_cleanup.json archivo_cleanup.json o eliminar una sección específica que contiene el resultado del trabajo que está interesado. Realizar este paso le permitirá activar la próxima limpieza de inmediato, sin tener que esperar el siguiente ciclo automático de limpieza.
Después de ejecutar la aplicación en modo --debug , debe detener la aplicación con Ctrl + C y luego reiniciarla sin la opción --debug para reanudar el proceso de limpieza normal.
logs/cleaner.logcache/history.logcache/latest_cleanup.json Este repositorio contiene dos Dockerfiles ubicados en el directorio raíz: Dockerfile basado en Alpine Linux y Dockerfile.bullseye basado en Debian 11.
Ambos contenedores Docker están diseñados para ejecutar el mismo comando: python3 main.py --watch --http-logs , que inicia el proceso de limpieza en un bucle infinito. Una vez iniciado, el contenedor continuará funcionando indefinidamente sin ninguna intervención adicional. Esta configuración garantiza un proceso de limpieza suave y continuo para imágenes de Docker.
Alpino:
docker build -t cleaner:alpine .
Debian:
docker build -t cleaner:debian -f Dockerfile.bullseye .
Para ejecutar el limpiador del registro Docker, deberá proporcionar las variables de entorno necesarias para la autenticación y, si es necesario, montar archivos de configuración frescos dentro del contenedor:
docker run
-v ./config/config.yaml:/app/config/config.yaml
-v ./config/jobs.yaml:/app/config/jobs.yaml
cleaner
Detener:
docker container stop <container_name> -s KILL