Einfacher Docker -Registrierungsreiniger in Python, das die Docker Registry HTTP API V2 verwendet.
Der Docker Registry Cleaner ist eine Befehlszeilenanwendung, mit der alte Docker -Bilder automatisch von einer Docker -Registrierung reinigen können. Es bietet eine flexible und konfigurierbare Möglichkeit, Reinigungsjobs auf der Grundlage verschiedener Kriterien zu definieren.
Der Docker -Registrierungsreiniger kann installiert und mit Python 3.11 oder höher ausgeführt werden. Befolgen Sie die folgenden Schritte, um die Anwendung zu installieren und auszuführen:
Klonen Sie das Repository oder laden Sie den Quellcode aus dem GitHub -Repository herunter.
Installieren Sie die erforderlichen Abhängigkeiten, indem Sie den folgenden Befehl ausführen, oder verwenden Sie einfach das Pipenv -Tool:
pip install -r requirements.txt
Alle Abhängigkeiten, einschließlich Dev
pip install -r requirements.all.txt
Der Docker -Registrierungsreiniger benötigt 3 Konfigurationsdateien: config/config.yaml , config/jobs.yaml und config/manual.yaml .
Beispiele finden Sie im Repository
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 : Die URL der Docker -Registrierung zu reinigen.username : Der Benutzername, der zur Authentifizierung mit der Docker -Registrierung verwendet wird.password : Das für die Authentifizierung verwendete Kennwort mit der Docker -Registrierung.max_concurrent_requests : Die maximale Anzahl der gleichzeitigen Anforderungen, die die Anwendung an die Registrierung stellen kann. Standardwert: 20.proxy : Die URL des Proxy -Servers, mit dem Anforderungen an die Registrierung gestellt werden sollen. Wenn nicht benötigt, lassen Sie leer oder löschen.timeout : Die Auszeit für jede HTTP -Anfrage in Sekunden. Standardwert: 20.username , registry und proxy können unter Verwendung von Umgebungsvariablen festgelegt werden, wie im Beispiel gezeigt Eine Liste von Aufräumarbeiten, die in jobs.yaml definiert sind.yaml. Jeder Job wird durch die folgenden Parameter definiert:
- 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 : Der Name des Jobs.description : Eine optionale Beschreibung des Jobs.repositories : String -Array des Repository -Namens Regexps und Namen zum Aufräumen von Bildern.tag_regexps : String -Array regulärer Ausdrücke, die Tags in den Repositories übereinstimmen. Nur Tags, die diesen Regex -Mustern entsprechen, werden für die Reinigung berücksichtigt. Seien Sie vorsichtig, wenn Sie diese Option verwenden. Überprüfen Sie Ihren Regexp unter https://regex101.com/save_last : Die Anzahl der letzten Tags, die in jedem Repository gespeichert werden sollen (ausgeschlossen von der Reinigung).clean_every_n_hours : Das Intervall in Stunden zwischen aufeinanderfolgender Aufräumarbeiten läuft für diesen Job.older_than_days : Das Alter in Tagen, nach denen Tags zur Reinigung in Betracht gezogen werden. Tags werden nach regulären Ausdrücken gruppiert, wobei jeder reguläre Ausdruck eine andere Gruppe darstellt. Wenn Sie die letzten 5 Tags für release-xx-dev und release-xx unabhängig voneinander speichern müssen. Ihr regulärer Ausdruck kann jedoch beide Arten von Tags übereinstimmen, Sie werden ein gemischtes Array mit 5- release-xx-dev und release-xx Tags haben. Um diese Situation zu verhindern, müssen Sie zwei verschiedene reguläre Ausdrücke hinzufügen, um release-xx und release-xx-dev unabhängig voneinander zu entsprechen.
Unterschiede zu jobs.yaml :
--jobs verwendet, mit der Sie in manual.yaml deklarierte Jobs angeben können. Yaml.Verwenden Sie den folgenden Befehl, um den Docker Registry Cleaner auszuführen:
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
Der Docker Registry Cleaner akzeptiert die folgenden Optionen:
--debug : Wenn angegeben, generiert die Anwendung Protokolle, ohne die Bilder tatsächlich zu löschen. Verwenden Sie diese Option, wenn Sie die Bilder überprüfen müssen, die die App löscht--watch : Wenn die Anwendung bereitgestellt wird, wird die Anwendung in einer endlosen Schleife ausgeführt, wobei regelmäßig Bereinigungsjobs basierend auf der Konfiguration in config.yaml ausgeführt werden.--jobs : Eine Liste der in manuellen definierten Jobnamen, die Sie ausführen möchten. Zum Beispiel: --jobs clean-dev-tags clean-prod-older-15 .--http-logs : Wenn die HTTP-Protokolle für jede von der Anwendung gestellte Anforderung aktiviert sind, werden HTTP-Protokolle aktiviert. Wenn Sie die Anwendung mit der Option --debug verwendet haben und den Reinigungsprozess sofort auslösen müssen, müssen Sie möglicherweise die Datei latest_cleanup.json aufräumen oder einen bestimmten Abschnitt löschen, der das von Ihnen interessierte Auftragsergebnis enthält. Wenn Sie diesen Schritt sofort ausführen, können Sie sofort die nächste Reinigung auslösen, ohne auf den nächsten automatischen Reinigungszyklus zu warten.
Nach dem Ausführen der Anwendung im --debug -Modus müssen Sie die Anwendung mit Ctrl + C stoppen und dann ohne die Option --debug -Option neu starten, um den normalen Reinigungsvorgang wieder aufzunehmen.
logs/cleaner.log gespeichert sind.logcache/history.log durchgeführtcache/latest_cleanup.json Dieses Repository enthält zwei Dockerfiles im Stammverzeichnis: Dockerfile basierend auf Alpine Linux und Dockerfile.bullseye basierend auf Debian 11.
Beide Docker-Container sind so konzipiert, dass sie denselben Befehl ausführen: python3 main.py --watch --http-logs , das den Reinigungsprozess in einer unendlichen Schleife startet. Nach dem Start wird der Container ohne weitere Intervention weiterhin auf unbestimmte Zeit laufen. Dieses Setup sorgt für einen reibungslosen und kontinuierlichen Aufräumvorgang für Docker -Bilder.
Alpin:
docker build -t cleaner:alpine .
Debian:
docker build -t cleaner:debian -f Dockerfile.bullseye .
Um den Docker Registry Cleaner auszuführen, müssen Sie die erforderlichen Umgebungsvariablen für die Authentifizierung bereitstellen und bei Bedarf neue Konfigurationsdateien im Container montieren:
docker run
-v ./config/config.yaml:/app/config/config.yaml
-v ./config/jobs.yaml:/app/config/jobs.yaml
cleaner
Stoppen:
docker container stop <container_name> -s KILL