Docker-Registry-Cache
Was dieser Artikel über Docker-Registry-Caches behandelt
- Was ein Pull-Through-Cache ist.
- Wie man einen lokalen Registry-Mirror aufbaut.
- Konfiguration für Docker-Engine und BuildKit.
- Vorteile und Limitierungen.
- Tipps für den Betrieb.
Einleitung: Docker-Registry-Cache
Wer regelmässig Docker-Images baut oder viele Container startet, lädt dieselben Images immer wieder neu herunter. Ein Registry-Cache, auch Pull-Through-Cache oder Registry-Mirror genannt, speichert heruntergeladene Images lokal und liefert sie bei erneutem Bedarf aus. Das spart Bandbreite, beschleunigt Builds und reduziert Abhängigkeiten von externen Registries wie Docker Hub.
Dieser Artikel zeigt, wie man einen eigenen Docker-Registry-Cache einrichtet.
Wichtige Begriffe
- Pull-Through Cache: Proxy, der Images bei Bedarf holt und cacht.
- Registry-Mirror: Alternative Quelle für Docker Hub.
- Docker Distribution: Docker-eigene Registry-Referenzimplementierung.
- BuildKit: Moderner Docker-Builder.
- Image-Cache: Lokal zwischengespeicherte Images.
- Proxy-Mode: Registry fungiert als Durchgriff.
- Bandwidth: Bandbreite.
- Rate-Limit: Docker Hub begrenzt Downloads.
Wann lohnt sich ein Cache?
- Viele Builds auf derselben Maschine.
- Mehrere Docker-Hosts im Netzwerk.
- Langsame oder teure Internetverbindung.
- Docker-Hub-Rate-Limits vermeiden.
- CI/CD mit häufigen Builds.
Einfachen Registry-Cache starten
docker run -d -p 5000:5000 \
--name registry-cache \
-v /opt/registry-cache:/var/lib/registry \
-e REGISTRY_PROXY_REMOTEURL=https://registry-1.docker.io \
-e REGISTRY_PROXY_USERNAME=benutzer \
-e REGISTRY_PROXY_PASSWORD=passwort \
registry:2
Mit Docker Hub-Login, um Rate-Limits zu umgehen.
Docker-Engine konfigurieren
In /etc/docker/daemon.json:
{
"registry-mirrors": ["http://localhost:5000"]
}
Danach Docker neu starten:
sudo systemctl restart docker
BuildKit-Cache
BuildKit kann separate Cache-Backends für Layer verwenden. Für einen Registry-Cache von Images:
{
"builder": {
"gc": {
"defaultKeepStorage": "20GB"
}
},
"registry-mirrors": ["http://localhost:5000"]
}
In Compose
services:
cache:
image: registry:2
ports:
- "5000:5000"
environment:
REGISTRY_PROXY_REMOTEURL: https://registry-1.docker.io
REGISTRY_PROXY_USERNAME: benutzer
REGISTRY_PROXY_PASSWORD: passwort
volumes:
- registry-cache:/var/lib/registry
volumes:
registry-cache:
Mehrere Hosts im Netzwerk
Andere Hosts nutzen die Registry als Mirror:
{
"registry-mirrors": ["http://cache-server:5000"]
}
Sicherer ist HTTPS mit eigenem Zertifikat.
Cache prüfen
curl http://localhost:5000/v2/_catalog
Cache-Grösse begrenzen
Docker Registry hat kein eingebautes Grössenlimit. Man muss regelmässig aufräumen:
docker exec registry-cache bin/registry garbage-collect /etc/docker/registry/config.yml
Oder Volumes begrenzen.
Vorteile
- Schnellere Downloads.
- Weniger Bandbreite.
- Unabhängigkeit von Docker Hub.
- Bessere CI/CD-Zeiten.
- Rate-Limit-Reduktion.
Limitierungen
- Nur öffentliche Images oder eigene Credentials.
- Kein Ersatz für private Registry.
- Caching von Ebenen, nicht direkter Build-Cache.
- Speicher wächst, muss gewartet werden.
Tipps
- TLS für externe Nutzung.
- Regelmässiges Aufräumen.
- Authentifizierung bei Docker Hub hinterlegen.
- Monitoring der Cache-Hit-Rate.
- Backup des Volumes.
Typische Stolpersteine
- Cache wird nicht genutzt:
registry-mirrorsnicht indaemon.json. - Authentifizierung fehlschlägt: Docker-Hub-Credentials falsch.
- Platz läuft voll: Keine Aufräumarbeiten.
- HTTPS fehlt: Unsichere Kommunikation.
- Cache veraltet: Keine Invalidierung.
- Firewall: Port 5000 nicht freigegeben.
Weiterführende Links und Infos
- BotServ.de Docker Registry
- BotServ.de Docker Image-Optimierung
- BotServ.de Docker Layer-Caching
- BotServ.de Docker Befehle
FAQ: Docker-Registry-Cache
Was ist der Unterschied zwischen Registry und Cache? Eine Registry speichert eigene Images, ein Pull-Through-Cache holt externe Images und speichert sie lokal.
Kann ich Docker Hub komplett ersetzen? Nein, aber man kann Images cachen und Rate-Limits umgehen.
Brauche ich Docker Hub Login? Für private Images und höhere Limits ja.
Funktioniert das auch mit BuildKit?
Ja, registry-mirrors greift beim Pull.
Soll ich TLS nutzen? Immer, wenn der Cache über das Netzwerk erreichbar ist.
Quellen und weiterführende Literatur
- Docker Registry als pull-through cache: https://docs.docker.com/docker-hub/mirror/
- Docker Registry: https://distribution.github.io/distribution/
- BuildKit: https://docs.docker.com/build/buildkit/
Zusammenfassung: Docker-Registry-Cache
Ein Docker-Registry-Cache reduziert Downloads, spart Bandbreite und beschleunigt Builds. Er wird als Pull-Through-Proxy eingerichtet und in der Docker-Engine als registry-mirror hinterlegt. Für die eigene Infrastruktur oder CI/CD lohnt er sich schnell. Wichtig sind Authentifizierung, TLS bei externem Zugriff und regelmässige Wartung, damit der Speicher nicht unbegrenzt wächst.


