Private Docker Registry einrichten: Image-Speicherung und -Verwaltung
Private Docker Registry einrichten, sichere Registry mit TLS, Authentifizierung, Image Push/Pull, Enterprise Registry mit Harbor und CI/CD-Integration.
Inhaltsverzeichnis
Private Docker Registry einrichten
Öffentliche Registries wie Docker Hub sind praktisch, aber das Hosten einer eigenen Registry für private Images bietet Vorteile in Sicherheit, Geschwindigkeit und Kosten. Dieser Leitfaden behandelt Optionen von der einfachen Docker Registry bis zum Enterprise Harbor.
Warum eine private Registry?
| Vorteil | Beschreibung |
|---|---|
| Sicherheit | Private Images nicht öffentlich zugänglich |
| Geschwindigkeit | Schnelles Pull/Push im lokalen Netzwerk |
| Kosten | Keine Docker Hub Rate Limits |
| Kontrolle | Vollständige Image-Lifecycle-Kontrolle |
| Compliance | Datenlokalisierungsanforderungen |
1. Einfache Docker Registry (registry:2)
Grundlegende Einrichtung
# Registry-Container starten
docker run -d \
--name registry \
--restart always \
-p 5000:5000 \
-v registry-data:/var/lib/registry \
registry:2
# Registry-Betrieb überprüfen
curl http://localhost:5000/v2/
# Ausgabe: {}
Image Push und Pull
# Image taggen
docker tag myapp:latest localhost:5000/myapp:latest
# In Registry pushen
docker push localhost:5000/myapp:latest
# Aus Registry pullen
docker pull localhost:5000/myapp:latest
# Images in Registry auflisten
curl http://localhost:5000/v2/_catalog
2. Sichere Registry mit TLS
# Zertifikatsverzeichnis erstellen
mkdir -p /etc/docker/certs/registry
# Self-Signed-Zertifikat erstellen
openssl req -newkey rsa:4096 -nodes -sha256 \
-keyout /etc/docker/certs/registry/domain.key \
-x509 -days 365 \
-out /etc/docker/certs/registry/domain.crt \
-subj "/CN=registry.example.com" \
-addext "subjectAltName=DNS:registry.example.com,IP:192.168.1.100"
# Zertifikat zu Dockers vertrauenswürdigen Zertifikaten hinzufügen
mkdir -p /etc/docker/certs.d/registry.example.com:5000
cp /etc/docker/certs/registry/domain.crt \
/etc/docker/certs.d/registry.example.com:5000/ca.crt
systemctl restart docker
Registry mit TLS starten
docker run -d \
--name registry \
--restart always \
-p 5000:5000 \
-v registry-data:/var/lib/registry \
-v /etc/docker/certs/registry:/certs \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
-e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
registry:2
3. Registry mit Authentifizierung
# htpasswd-Datei erstellen
mkdir -p /etc/docker/registry/auth
docker run --rm \
--entrypoint htpasswd \
httpd:2 -Bbn admin StarkesPasswort123! > /etc/docker/registry/auth/htpasswd
# Registry mit Authentifizierung starten
docker run -d \
--name registry \
--restart always \
-p 5000:5000 \
-v registry-data:/var/lib/registry \
-v /etc/docker/certs/registry:/certs \
-v /etc/docker/registry/auth:/auth \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
-e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
-e REGISTRY_AUTH=htpasswd \
-e REGISTRY_AUTH_HTPASSWD_REALM="Registry Realm" \
-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
registry:2
# Anmelden
docker login registry.example.com:5000
4. Registry mit Docker Compose
version: '3.8'
services:
registry:
image: registry:2
restart: always
ports:
- "5000:5000"
environment:
REGISTRY_HTTP_TLS_CERTIFICATE: /certs/domain.crt
REGISTRY_HTTP_TLS_KEY: /certs/domain.key
REGISTRY_AUTH: htpasswd
REGISTRY_AUTH_HTPASSWD_REALM: Registry Realm
REGISTRY_AUTH_HTPASSWD_PATH: /auth/htpasswd
REGISTRY_STORAGE_DELETE_ENABLED: "true"
volumes:
- registry-data:/var/lib/registry
- ./certs:/certs:ro
- ./auth:/auth:ro
registry-ui:
image: joxit/docker-registry-ui:latest
ports:
- "8080:80"
environment:
- REGISTRY_TITLE=REXE Private Registry
- REGISTRY_URL=https://registry.example.com:5000
- SINGLE_REGISTRY=true
volumes:
registry-data:
5. Harbor — Enterprise Registry
# Harbor-Installer herunterladen
wget https://github.com/goharbor/harbor/releases/download/v2.9.0/harbor-online-installer-v2.9.0.tgz
tar xzf harbor-online-installer-v2.9.0.tgz
cd harbor
cp harbor.yml.tmpl harbor.yml
nano harbor.yml
# harbor.yml
hostname: registry.example.com
https:
port: 443
certificate: /etc/harbor/certs/domain.crt
private_key: /etc/harbor/certs/domain.key
harbor_admin_password: StarkesPasswort123!
data_volume: /data/harbor
./install.sh
docker login registry.example.com
6. Registry-Bereinigung (Garbage Collection)
# Ungenutzte Schichten bereinigen
docker exec registry registry garbage-collect \
/etc/docker/registry/config.yml
# Dry-Run
docker exec registry registry garbage-collect \
--dry-run \
/etc/docker/registry/config.yml
7. CI/CD-Integration
# .github/workflows/build-push.yml
name: Build and Push
on:
push:
branches: [main]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Login to Private Registry
uses: docker/login-action@v3
with:
registry: registry.example.com:5000
username: ${{ secrets.REGISTRY_USER }}
password: ${{ secrets.REGISTRY_PASSWORD }}
- name: Build and Push
uses: docker/build-push-action@v5
with:
context: .
push: true
tags: registry.example.com:5000/myapp:${{ github.sha }}
Fazit
Eine private Docker Registry ist für Image-Sicherheit und -Verwaltung in Unternehmensumgebungen unerlässlich. Wählen Sie registry:2 für einfache Anwendungsfälle, Harbor für Enterprise-Funktionen (RBAC, Sicherheits-Scanning, Replikation). Mit einer privaten Registry auf REXE-Servern können Sie Ihre Images sicher speichern und in CI/CD-Pipelines integrieren.
Verwandte Artikel
K3s Kubernetes-Installation: Leichte Container-Orchestrierung
Einzel- und Multi-Node Kubernetes-Cluster-Setup mit K3s, kubectl-Nutzung, Deployments und Services erstellen, Anwendungsverwaltung mit Helm. Kubernetes-Leitfaden für VPS-Umgebungen.
Docker Volume und Netzwerkverwaltung: Persistenter Speicher und Netzwerkkonfiguration
Docker Volume-Typen (Named, Bind Mount, tmpfs), Volume-Verwaltung, Docker-Netzwerkmodi (Bridge, Host, Overlay), benutzerdefinierte Netzwerke und Container-Kommunikation. Umfassender Leitfaden.
Container-Logging: Docker und Kubernetes Log-Verwaltung
Docker-Log-Treiber, docker logs-Befehl, Kubernetes Pod-Logs, zentralisierte Log-Sammlung (Loki, ELK Stack), Log-Rotation und Best Practices für Log-Verwaltung in Produktionsumgebungen.