Private Docker Registry auf Ubuntu einrichten – Schritt für Schritt
Einleitung
Eine private Docker Registry stellt eine selbstverwaltete Lösung für die Speicherung und Verteilung von Container-Images dar. Im Gegensatz zu öffentlichen Registries wie Docker Hub bietet eine private Registry vollständige Kontrolle über Zugriffsberechtigung, Sicherheit und Verfügbarkeit Ihrer Container-Images. Dies ist besonders wichtig für Unternehmen, die proprietäre Anwendungen entwickeln oder compliance-kritische Umgebungen betreiben.
Die Hauptvorteile einer eigenen Docker Registry umfassen die vollständige Kontrolle über Zugriffsrichtlinien, reduzierte Latenzzeiten durch lokale Speicherung, Unabhängigkeit von externen Diensten und die Möglichkeit, auch in abgeschotteten Netzwerken zu operieren. Gleichzeitig übernehmen Sie die Verantwortung für Wartung, Sicherheit und Backup-Strategien.
Dieses Tutorial zeigt Ihnen, wie Sie eine sichere private Docker Registry auf Ubuntu Server einrichten. Wir verwenden Docker Compose für die Container-Orchestrierung, Nginx als Reverse Proxy mit TLS-Terminierung und HTTP Basic Authentication für die Zugriffskontrolle.
Voraussetzungen
Für die Einrichtung einer privaten Docker Registry benötigen Sie folgende Komponenten:
- Ubuntu Server 22.04 LTS oder neuer mit mindestens 2 GB RAM und 20 GB Speicherplatz
- Root- oder sudo-Berechtigung auf dem Server
- Eine registrierte Domain, die auf Ihren Server zeigt
- Grundlegende Kenntnisse in der Linux-Administration und Docker
- Internetzugang für die Installation der erforderlichen Pakete
Stellen Sie sicher, dass Ihr System auf dem neuesten Stand ist:
sudo apt update && sudo apt upgrade -y
Schritt-für-Schritt Anleitung
Docker und Docker Compose installieren
Zunächst installieren wir Docker und Docker Compose auf Ihrem Ubuntu-Server. Fügen Sie das offizielle Docker-Repository hinzu:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Aktualisieren Sie die Paketliste und installieren Sie Docker:
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin -y
Fügen Sie Ihren Benutzer zur Docker-Gruppe hinzu:
sudo usermod -aG docker $USER
newgrp docker
Nginx installieren und konfigurieren
Installieren Sie Nginx als Reverse Proxy für Ihre Registry:
sudo apt install nginx apache2-utils -y
Erstellen Sie eine Nginx-Konfigurationsdatei für Ihre Registry. Ersetzen Sie registry.ihredomain.de durch Ihre tatsächliche Domain:
sudo nano /etc/nginx/sites-available/docker-registry
Fügen Sie folgende Konfiguration hinzu:
upstream docker-registry {
server 127.0.0.1:5000;
}
map $upstream_http_docker_distribution_api_version $docker_distribution_api_version {
'' 'registry/2.0';
}
server {
listen 80;
server_name registry.ihredomain.de;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name registry.ihredomain.de;
ssl_certificate /etc/letsencrypt/live/registry.ihredomain.de/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/registry.ihredomain.de/privkey.pem;
client_max_body_size 0;
chunked_transfer_encoding on;
location /v2/ {
auth_basic "Docker Registry";
auth_basic_user_file /etc/nginx/docker-registry.htpasswd;
add_header 'Docker-Distribution-Api-Version' $docker_distribution_api_version always;
proxy_pass http://docker-registry;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 900;
}
}
SSL-Zertifikat mit Let’s Encrypt einrichten
Installieren Sie Certbot für automatische SSL-Zertifikate:
sudo apt install certbot python3-certbot-nginx -y
Aktivieren Sie zunächst die Nginx-Konfiguration ohne SSL:
sudo ln -s /etc/nginx/sites-available/docker-registry /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
Erstellen Sie das SSL-Zertifikat:
sudo certbot --nginx -d registry.ihredomain.de
Authentifizierung konfigurieren
Erstellen Sie eine Passwort-Datei für die HTTP Basic Authentication. Ersetzen Sie username durch Ihren gewünschten Benutzernamen:
sudo htpasswd -c /etc/nginx/docker-registry.htpasswd username
Geben Sie ein sicheres Passwort ein, wenn Sie dazu aufgefordert werden.
Docker Registry mit Docker Compose einrichten
Erstellen Sie ein Verzeichnis für die Registry-Konfiguration:
mkdir ~/docker-registry
cd ~/docker-registry
Erstellen Sie eine docker-compose.yml-Datei:
nano docker-compose.yml
Fügen Sie folgende Konfiguration hinzu:
version: '3.8'
services:
registry:
image: registry:2
container_name: docker-registry
restart: unless-stopped
ports:
- "127.0.0.1:5000:5000"
environment:
REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY: /var/lib/registry
REGISTRY_STORAGE_DELETE_ENABLED: "true"
volumes:
- registry-data:/var/lib/registry
networks:
- registry-network
volumes:
registry-data:
networks:
registry-network:
Starten Sie die Registry:
docker compose up -d
Aktualisieren Sie die Nginx-Konfiguration und starten Sie den Service neu:
sudo systemctl reload nginx
Überprüfung
Registry-Funktionalität testen
Überprüfen Sie zunächst, ob die Registry läuft:
docker ps
Testen Sie die Verbindung zur Registry:
curl -u username https://registry.ihredomain.de/v2/_catalog
Sie sollten eine JSON-Antwort mit einem leeren Repository-Array erhalten.
Test-Image pushen und pullen
Melden Sie sich bei Ihrer Registry an:
docker login registry.ihredomain.de
Laden Sie ein Test-Image herunter und taggen Sie es für Ihre Registry:
docker pull alpine:latest
docker tag alpine:latest registry.ihredomain.de/alpine:latest
Pushen Sie das Image in Ihre Registry:
docker push registry.ihredomain.de/alpine:latest
Überprüfen Sie, ob das Image erfolgreich gespeichert wurde:
curl -u username https://registry.ihredomain.de/v2/_catalog
Troubleshooting
Häufige Probleme und Lösungen
Problem: Registry ist nicht erreichbar
- Überprüfen Sie den Status der Docker-Container mit
docker ps - Prüfen Sie die Nginx-Konfiguration mit
sudo nginx -t - Kontrollieren Sie die Firewall-Einstellungen mit
sudo ufw status
Problem: SSL-Zertifikat-Fehler
- Stellen Sie sicher, dass Ihre Domain korrekt auf den Server zeigt
- Überprüfen Sie die Certbot-Logs mit
sudo certbot certificates - Erneuern Sie das Zertifikat mit
sudo certbot renew --dry-run
Problem: Authentifizierungsfehler
- Überprüfen Sie die htpasswd-Datei mit
sudo cat /etc/nginx/docker-registry.htpasswd - Testen Sie die Anmeldung manuell mit
docker logoutunddocker login
Log-Dateien überprüfen
Für eine detaillierte Fehleranalyse können Sie verschiedene Log-Dateien einsehen:
# Docker Registry Logs
docker logs docker-registry
# Nginx Logs
sudo tail -f /var/log/nginx/error.log
sudo tail -f /var/log/nginx/access.log
Fazit
Sie haben erfolgreich eine private Docker Registry auf Ubuntu Server eingerichtet. Diese Lösung bietet Ihnen vollständige Kontrolle über Ihre Container-Images und gewährleistet deren Sicherheit durch HTTPS-Verschlüsselung und HTTP Basic Authentication.
Die eingerichtete Registry kann nun für die Speicherung und Verteilung Ihrer eigenen Docker-Images verwendet werden. Vergessen Sie nicht, regelmäßige Backups der Registry-Daten zu erstellen und die SSL-Zertifikate zu überwachen. Für Produktionsumgebungen sollten Sie zusätzliche Sicherheitsmaßnahmen wie erweiterte Authentifizierungsmechanismen oder Netzwerksegmentierung in Betracht ziehen.
Mit dieser Grundlage können Sie Ihre Container-Infrastruktur weiter ausbauen und an Ihre spezifischen Anforderungen anpassen. Die private Registry bildet eine solide Basis für CI/CD-Pipelines und automatisierte Deployment-Prozesse in Ihrem Unternehmen.