Eigene Images in einer privaten Registry ablegen

Eigene Images in einer privaten Registry ablegen

Docker Hub ist die einfachste Option für Images — aber nicht immer die richtige. Rate Limits, private Code-Basis und Datenschutzanforderungen sprechen oft für eine eigene Registry.

Warum eine private Registry?

Docker Hub hat für kostenlose Accounts Pull-Rate-Limits (100 Pulls pro 6 Stunden ohne Login). Private Repositories kosten extra. Wer eigene Images mit proprietärem Code baut, will diese nicht auf fremden Servern speichern.

  • Alternativen:
  • GitHub Container Registry (ghcr.io) — kostenlos für öffentliche Repos, günstig für private
  • Eigene Registry auf eigenem Server

Selbstgehostete Registry mit registry:2

Das offizielle Docker Registry-Image ist das einfachste Setup:

docker run -d \
  --name registry \
  --restart=always \
  -p 5000:5000 \
  -v /data/registry:/var/lib/registry \
  registry:2

Das war es. Die Registry läuft jetzt auf Port 5000.

Images pushen und pullen

# Bestehendes Image für die Registry taggen
docker tag myapp:1.0 localhost:5000/myapp:1.0

# Pushen
docker push localhost:5000/myapp:1.0

# Auf anderem Host pullen
docker pull localhost:5000/myapp:1.0

TLS für Remote-Zugriff

Für eine Registry, auf die mehrere Hosts zugreifen sollen, ist TLS Pflicht. Ohne TLS gilt die Registry als "insecure" und Docker verweigert standardmäßig den Zugriff.

Option 1: Eigenes Zertifikat konfigurieren:

docker run -d \
  --name registry \
  -p 443:5000 \
  -v /data/registry:/var/lib/registry \
  -v /path/to/certs:/certs \
  -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/fullchain.pem \
  -e REGISTRY_HTTP_TLS_KEY=/certs/privkey.pem \
  registry:2

Option 2: Reverse Proxy (nginx oder Caddy) mit TLS vorschalten — die Registry selbst bleibt auf localhost:5000.

Insecure Registry (nur für lokales Netz)

Für interne Tests ohne TLS: Registry als "insecure" in der Docker-Daemon-Konfiguration eintragen:

{
  "insecure-registries": ["192.168.1.100:5000"]
}
sudo systemctl restart docker

GitHub Container Registry (ghcr.io)

Für Teams, die GitHub nutzen, ist ghcr.io oft die einfachste Lösung:

# Login mit Personal Access Token
echo $GITHUB_TOKEN | docker login ghcr.io -u USERNAME --password-stdin

# Image pushen
docker tag myapp:1.0 ghcr.io/ORGANISATION/myapp:1.0
docker push ghcr.io/ORGANISATION/myapp:1.0

Zugriff wird über GitHub-Berechtigungen gesteuert — keine separate Benutzerverwaltung nötig.