Cleaner de registre Docker simple écrit en Python qui utilise l'API HTTP V2 Docker Registry HTTP.
Le Docker Registry Cleaner est une application de ligne de commande conçue pour nettoyer automatiquement les anciennes images Docker à partir d'un registre Docker. Il fournit un moyen flexible et configurable de définir des travaux de nettoyage en fonction de divers critères.
Le nettoyant Docker Registry peut être installé et exécuté à l'aide de Python 3.11 ou supérieur. Suivez les étapes ci-dessous pour installer et exécuter l'application:
Clone le référentiel ou téléchargez le code source à partir du référentiel GitHub.
Installez les dépendances requises en exécutant la commande suivante ou utilisez simplement l'outil Pipenv :
pip install -r requirements.txt
Toutes les dépendances, y compris Dev
pip install -r requirements.all.txt
Le nettoyant Docker Registry nécessite 3 fichiers de configuration: config/config.yaml , config/jobs.yaml et config/manual.yaml .
Des exemples peuvent être trouvés dans le référentiel
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 : L'URL du registre Docker à nettoyer.username : le nom d'utilisateur utilisé pour l'authentification avec le registre Docker.password : le mot de passe utilisé pour l'authentification avec le registre Docker.max_concurrent_requests : Le nombre maximum de demandes simultanées que l'application peut faire au registre. Valeur par défaut: 20.proxy : L'URL du serveur proxy à utiliser pour faire des demandes au registre. Si ce n'est pas nécessaire, laissez vide ou supprimez.timeout : le délai d'expiration pour chaque demande HTTP en secondes. Valeur par défaut: 20.username , registry et proxy peuvent être définis en utilisant des variables d'environnement, comme le montre l'exemple Une liste des travaux de nettoyage définis dans jobs.yaml . Chaque travail est défini par les paramètres suivants:
- 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 : le nom du travail.description : Une description facultative du travail.repositories : Tableau de chaîne du nom du référentiel regexps et noms pour nettoyer les images.tag_regexps : tableau de chaîne d'expressions régulières pour faire correspondre les balises dans les référentiels. Seules les balises correspondant à ces motifs regex seront prises en compte pour le nettoyage. Soyez prudent lorsque vous utilisez cette option. Vérifiez votre regexp sur https://regex101.com/save_last : Le numéro des dernières balises à enregistrer (exclu du nettoyage) dans chaque référentiel.clean_every_n_hours : L'intervalle en heures entre le nettoyage successif fonctionne pour ce travail.older_than_days : L'âge en jours après quoi les balises seront considérées pour le nettoyage. Les balises sont regroupées par expressions régulières, chaque expression régulière représentant un groupe différent. Si vous devez enregistrer les 5 dernières balises pour release-xx-dev et release-xx indépendamment, mais votre expression régulière peut correspondre aux deux types de balises, vous vous retrouverez avec un tableau mixte contenant 5 balises release-xx-dev et release-xx . Pour empêcher cette situation, vous devez ajouter deux expressions régulières différentes pour correspondre release-xx et release-xx-dev indépendamment.
Différences par rapport jobs.yaml .
--jobs , qui vous permet de spécifier les travaux déclarés dans manual.yaml .Utilisez la commande suivante pour exécuter le nettoyant Docker Registry:
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
Le nettoyant Docker Registry accepte les options suivantes:
--debug : Si fourni, l'application générera des journaux sans supprimer réellement les images. Utilisez cette option si vous avez besoin de vérifier les images que l'application supprimera--watch : Si fourni, l'application s'exécutera dans une boucle sans fin, exécutant périodiquement des travaux de nettoyage basés sur la configuration de config.yaml .--jobs : une liste de noms de travail définis dans manuel.yaml que vous souhaitez exécuter. Par exemple: --jobs clean-dev-tags clean-prod-older-15 .--http-logs : Si fourni, les journaux HTTP seront activés pour chaque demande faite par l'application. Si vous avez utilisé l'application avec l'option --debug et que vous devez déclencher le processus de nettoyage immédiatement, vous devrez peut-être nettoyer le fichier latest_cleanup.json ou supprimer une section spécifique contenant le résultat du travail qui vous intéresse. Effectuer cette étape vous permettra de déclencher le nettoyage suivant immédiatement, sans avoir à attendre le prochain cycle de nettoyage automatique.
Après avoir exécuté l'application en mode --debug , vous devez arrêter l'application avec Ctrl + C , puis le redémarrer sans l'option --debug pour reprendre le processus de nettoyage normal.
logs/cleaner.logcache/history.logcache/latest_cleanup.json Ce référentiel contient deux dockerfiles situés dans le répertoire racine: Dockerfile basé sur Alpine Linux et Dockerfile.bullseye basé sur Debian 11.
Les deux conteneurs Docker sont conçus pour exécuter la même commande: python3 main.py --watch --http-logs , qui démarre le processus de nettoyage dans une boucle infinie. Une fois démarré, le conteneur continuera de fonctionner indéfiniment sans autre intervention. Cette configuration assure un processus de nettoyage lisse et continu pour les images Docker.
Alpin:
docker build -t cleaner:alpine .
Debian:
docker build -t cleaner:debian -f Dockerfile.bullseye .
Pour exécuter le nettoyant Docker Registry, vous devrez fournir les variables d'environnement nécessaires pour l'authentification et, si nécessaire, monter de nouveaux fichiers de configuration à l'intérieur du conteneur:
docker run
-v ./config/config.yaml:/app/config/config.yaml
-v ./config/jobs.yaml:/app/config/jobs.yaml
cleaner
Arrêt:
docker container stop <container_name> -s KILL