Images aus Fremd-Registries holen, loeschen und Speicher aufraeumen

Tab "Images" um Verwaltungsfunktionen erweitert:
- Einzel-Pull: Image aus anderer Registry (z. B. Docker Hub) per skopeo
  in die eigene Registry kopieren, optional mit Benutzername/Kennwort
  oder Access Token fuer private Quell-Registries
- Bulk-Pull: alle image-Eintraege einer docker-compose (Textfeld oder
  Datei-Upload) auf einmal holen; Variablen/eigene Registry werden ignoriert
- Digest-Dedup: bereits mit gleichem Digest vorhandene Images werden
  uebersprungen (kopiert mit --all, damit Multi-Arch-Digests matchen)
- Loeschen: Muelltonne hinter jedem Tag mit Rueckfrage
- Garbage Collection: gibt belegten Speicher frei, laeuft per registry-Binary
  (Multi-Stage-Build) direkt auf dem gemounteten Speicher, kein Docker-Socket

gunicorn: 1 Worker (gemeinsames Service-Passwort) + 8 Threads, Timeout 1800s
fuer lange Kopiervorgaenge.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-09 10:34:42 +02:00
parent 244138b6bd
commit 41daacd56c
9 changed files with 576 additions and 2 deletions
+13 -1
View File
@@ -1,7 +1,15 @@
# Die registry-Binary aus dem offiziellen Image uebernehmen (fuer Garbage Collection)
FROM registry:2 AS registry
FROM python:3.12-alpine
WORKDIR /app
# skopeo wird benoetigt, um Images aus anderen Registries zu kopieren
RUN apk add --no-cache skopeo
# registry-Binary fuer "registry garbage-collect"
COPY --from=registry /bin/registry /usr/local/bin/registry
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
@@ -9,4 +17,8 @@ COPY . .
EXPOSE 5000
CMD ["gunicorn", "--bind", "0.0.0.0:5000", "--workers", "1", "app:app"]
# 1 Worker (gemeinsames Service-Passwort) + mehrere Threads fuer parallele
# Anfragen, waehrend ein skopeo-Kopiervorgang laeuft.
# Langes Timeout, da das Kopieren grosser Images mehrere Minuten dauern kann.
CMD ["gunicorn", "--bind", "0.0.0.0:5000", "--workers", "1", "--threads", "8", \
"--timeout", "1800", "app:app"]