Simple Docker Registry Cleaner, написанный на Python, который использует реестр Docker HTTP API V2.
Docker Registry Cleaner - это приложение командной строки, предназначенное для автоматического очистки старых изображений Docker из реестра Docker. Он обеспечивает гибкий и настраиваемый способ определения заданий очистки на основе различных критериев.
Уборщик реестра Docker может быть установлен и запускаться с помощью Python 3.11 или выше. Следуйте приведенным ниже шагам, чтобы установить и запустить приложение:
Клонировать хранилище или загрузите исходный код из репозитория GitHub.
Установите требуемые зависимости, выполнив следующую команду или просто используйте инструмент Pipenv :
pip install -r requirements.txt
Все зависимости, включая Dev
pip install -r requirements.all.txt
Очистка реестра Docker требует 3 файлов конфигурации: config/config.yaml , config/jobs.yaml и config/manual.yaml .
Примеры можно найти в репозитории
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 : URL -адрес реестра Docker, который будет очищен.username : имя пользователя, используемое для аутентификации с реестрами Docker.password : пароль, используемый для аутентификации в реестре Docker.max_concurrent_requests : максимальное количество одновременных запросов, которые приложение может сделать в реестре. Значение по умолчанию: 20.proxy : URL -адрес прокси -сервера, который будет использоваться для выполнения запросов в реестр. Если не нужно, оставьте пустым или удалите.timeout : тайм -аут для каждого HTTP -запроса за несколько секунд. Значение по умолчанию: 20.username , registry и proxy могут быть установлены с использованием переменных среды, как показано в примере Список рабочих мест для очистки, определенный в jobs.yaml . Каждое задание определяется следующими параметрами:
- 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 : имя работы.description : необязательное описание работы.repositories : строковые массивы репозитории имен и имен для очистки изображений.tag_regexps : строковые массивы регулярных выражений, чтобы соответствовать тегам в репозиториях. Только теги, соответствующие этим рисункам режима, будут рассмотрены для очистки. Будьте осторожны, когда вы используете эту опцию. Проверьте свою Regexp по адресу https://regex101.com/save_last : количество последних тегов, которые будут сохранены (исключены из очистки) в каждом репозитории.clean_every_n_hours : интервал в часах между последовательными пробегами очистки для этой работы.older_than_days : возраст за несколько дней, после чего теги будут рассмотрены для очистки. Теги сгруппируются по регулярным выражениям, причем каждое регулярное выражение представляет собой другую группу. Если вам нужно независимо сохранить последние 5 тегов как для release-xx-dev , так и release-xx , но ваше регулярное выражение может соответствовать оба типа тегов, вы получите смешанный массив, содержащий 5 тегов release-xx-dev и release-xx . Чтобы предотвратить эту ситуацию, вам необходимо добавить два разных регулярных выражения, чтобы независимо соответствовать release-xx и release-xx-dev .
Отличия от jobs.yaml :
--jobs , которая позволяет вам указать задание, объявленные в manual.yaml .Используйте следующую команду для запуска Docker Registry Cleaner:
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
Docker Registry Cleaner принимает следующие варианты:
--debug : если предоставлено, приложение будет генерировать журналы без фактического удаления изображений. Используйте эту опцию, если вам нужно проверить изображения, которые приложение удалит--watch : если предоставлено, приложение будет работать в бесконечном цикле, периодически выполняя задания очистки на основе конфигурации в config.yaml .--jobs : список имен заданий, определенных в Manual.yaml, который вы хотите запустить. Например: --jobs clean-dev-tags clean-prod-older-15 .--http-logs : если предоставлены, журналы HTTP будут включены для каждого запроса, сделанного приложением. Если вы использовали приложение с опцией --debug и вам нужно немедленно запустить процесс очистки, вам может потребоваться очистить файл latest_cleanup.json или удалить конкретный раздел, содержащий результат работы, который вы заинтересованы.
После запуска приложения в режиме --debug вы должны остановить приложение с помощью Ctrl + C , а затем перезапустить его без опции --debug , чтобы возобновить обычный процесс очистки.
logs/cleaner.logcache/history.logcache/latest_cleanup.json Этот репозиторий содержит два Dockerfiles, расположенные в корневом каталоге: Dockerfile на основе Alpine Linux и Dockerfile.bullseye на основе Debian 11.
Оба контейнера Docker предназначены для выполнения одной и той же команды: python3 main.py --watch --http-logs , который запускает процесс очистки в бесконечной петле. После начала контейнер будет продолжать работать на неопределенный срок без какого -либо дальнейшего вмешательства. Эта настройка обеспечивает плавный и непрерывный процесс очистки для изображений Docker.
Альпийский:
docker build -t cleaner:alpine .
Debian:
docker build -t cleaner:debian -f Dockerfile.bullseye .
Чтобы запустить очиститель реестра Docker, вам нужно будет предоставить необходимые переменные среды для аутентификации и, при необходимости, установите свежие файлы конфигурации внутри контейнера:
docker run
-v ./config/config.yaml:/app/config/config.yaml
-v ./config/jobs.yaml:/app/config/jobs.yaml
cleaner
Останавливаться:
docker container stop <container_name> -s KILL