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>
Docker Registry mit Benutzerverwaltung
Private Docker Registry mit Web-Oberflaeche zur Benutzerverwaltung, HTTPS via Caddy und SQLite als Datenbank.
Voraussetzungen
- Docker und Docker Compose
- Eine Domain die auf den Server zeigt (A-Record)
- Port 80 und 443 frei
Einrichtung
1. .env Datei anpassen
nano .env
Folgende Werte setzen:
| Variable | Beschreibung |
|---|---|
DOMAIN |
Deine Domain, z.B. registry.meinserver.de |
ADMIN_USER |
Benutzername fuer die Web-Oberflaeche |
ADMIN_PASSWORD |
Passwort fuer die Web-Oberflaeche |
SECRET_KEY |
Zufaelliger Schluessel (siehe unten) |
2. Secret Key generieren
./generate-secret.sh
Traegt automatisch einen zufaelligen Schluessel in die .env Datei ein.
3. Starten
docker compose up -d --build
Caddy holt sich automatisch ein Let's Encrypt HTTPS-Zertifikat fuer die konfigurierte Domain.
Benutzerverwaltung
Web-Oberflaeche oeffnen unter:
https://DEINE-DOMAIN/
Dort mit den Admin-Zugangsdaten aus der .env anmelden. Ueber die Oberflaeche kannst du:
- Neue Registry-Benutzer anlegen
- Passwoerter aendern
- Benutzer loeschen
Images pushen und pullen
Anmelden
docker login registry.meinserver.de
Benutzername und Passwort eingeben (die in der Web-Oberflaeche angelegten Zugangsdaten).
Image taggen und pushen
# Lokales Image taggen
docker tag mein-image:latest registry.meinserver.de/mein-image:latest
# Image hochladen
docker push registry.meinserver.de/mein-image:latest
Image pullen
docker pull registry.meinserver.de/mein-image:latest
Image mit Build direkt pushen
docker build -t registry.meinserver.de/mein-app:1.0 .
docker push registry.meinserver.de/mein-app:1.0
Image aus anderer Registry holen (Web-Oberflaeche)
Im Tab Images der Web-Oberflaeche kann ein Image direkt aus einer anderen Registry (z. B. Docker Hub) in diese Registry kopiert werden – ganz ohne lokalen Docker-Client:
- Quell-Image eintragen, z. B.
nginx:latest,bitnami/redis:7oderghcr.io/owner/app:v1. - Public Images (Normalfall) brauchen nichts weiter. Bei privaten
Quell-Images passend ankreuzen:
- Benutzername / Kennwort – fuer Docker Hub (Access Token als Kennwort) und die meisten Registries.
- Access Token – fuer Registries mit direktem Bearer-Token.
- Auf Holen klicken. Das Image wird per skopeo inklusive aller Architekturen kopiert und erscheint anschliessend in der Liste der gespeicherten Images.
Ist ein Image mit dem gleichen Digest bereits vorhanden, wird es automatisch
uebersprungen – so wird ein Doppel-Upload vermieden, auch wenn der Tag (z. B.
latest) nicht eindeutig ist.
Mehrere Images aus einer docker-compose holen
Im selben Tab kann der Inhalt einer docker-compose.yml in ein Textfeld eingefuegt
oder eine Datei hochgeladen werden. Mit Alle Images holen werden alle
image:-Eintraege der Services in die Registry kopiert. Eintraege mit nicht
aufgeloesten Variablen (z. B. ${TAG}) oder die bereits auf diese Registry zeigen,
werden uebersprungen.
Images loeschen und Speicher aufraeumen (Web-Oberflaeche)
Im Tab Images kann jeder Tag ueber das Muelltonnen-Symbol (mit Rueckfrage) geloescht werden. Der Tag verschwindet sofort, der belegte Speicherplatz wird aber erst durch die Garbage Collection freigegeben:
- Button Speicher aufraeumen (Garbage Collection) entfernt alle Daten, die von keinem Image mehr referenziert werden (laeuft direkt ueber die registry-Binary, kein Docker-Socket noetig).
- Wichtig: Waehrend der Aufraeumung keine Images hochladen – frisch hochgeladene, noch nicht referenzierte Daten koennten sonst entfernt werden.
Nuetzliche Befehle
# Alle Images in der Registry auflisten
curl -u benutzer:passwort https://registry.meinserver.de/v2/_catalog
# Tags eines Images auflisten
curl -u benutzer:passwort https://registry.meinserver.de/v2/mein-image/tags/list
# Logs anzeigen
docker compose logs -f
# Stoppen
docker compose down
# Stoppen und alle Daten loeschen
docker compose down
rm -rf data/
Datenverzeichnisse
Alle Daten liegen lokal im ./data/ Ordner:
| Pfad | Inhalt |
|---|---|
data/caddy/ |
TLS-Zertifikate (Let's Encrypt) |
data/registry/ |
Gespeicherte Docker Images |
data/auth/users.db |
SQLite Datenbank mit Benutzern |
data/htpasswd/ |
Generierte htpasswd fuer die Registry |
Backup
Fuer ein vollstaendiges Backup reicht es den data/ Ordner und die .env Datei zu sichern:
tar czf backup-$(date +%Y%m%d).tar.gz data/ .env