Skip to content
BotServBotServ
DockerRegistryCachePull-ThroughMirror

Docker-Registry-Cache

Lokalen Pull-Through-Cache für Docker Hub betreiben. Bandbreite sparen, Builds beschleunigen und Images cachen.

S

schutzgeist

2 min read
Docker-Registry-Cache

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-mirrors nicht in daemon.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.

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

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.

Zurück zum KI Blog
Share:

Ähnliche Beiträge