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.