Docker Registry oder „Registry“ ist eine Open-Source- und hochskalierbare serverseitige Anwendung, die zum Speichern und Verteilen von Docker-Images verwendet werden kann. Es war eine serverseitige Anwendung hinter dem Docker Hub. In den meisten Anwendungsfällen ist eine Docker-Registrierung eine großartige Lösung, wenn Sie das CI/CD-System in Ihrer Anwendungsentwicklung implementieren möchten. Die private Docker-Registrierung bietet mehr Leistung für den Entwicklungs- und Produktionszyklus, indem alle Ihre benutzerdefinierten Docker-Images der Anwendung an einem Ort zentralisiert werden.
In diesem Tutorial zeigen wir Ihnen, wie Sie eine private Docker-Registrierung auf einem Ubuntu 18.04-Server installieren und konfigurieren. Wir verwenden einen Nginx-Webserver und schützen die Registry mit einem Nutzernamen und einem Passwort (Basisauthentifizierung).
Voraussetzungen
- Ubuntu 18.04-Server
- Root-Rechte
Was werden wir tun?
- Abhängigkeiten installieren
- Installieren Sie Docker und Docker-compose
- Private Docker-Registrierung einrichten
- Testen
Schritt 1 – Paketabhängigkeiten installieren
Zunächst werden wir einige Paketabhängigkeiten für die Bereitstellung der privaten Docker-Registrierung installieren.
Installieren Sie Paketabhängigkeiten mit dem folgenden Befehl.
sudo apt install -y gnupg2 pass apache2-utils httpie
Die Pakete gnupg2 und pass werden verwendet, um die Passwortauthentifizierung in der Docker-Registrierung zu speichern. Und die apache2-utils werden verwendet, um die grundlegende Authentifizierung zu generieren, und httpie wird zum Testen verwendet.
Schritt 2 – Docker und Docker-compose installieren
Jetzt werden wir Docker und Docker-Compose aus dem offiziellen Ubuntu-Repository installieren.
Installieren Sie Docker und Docker-compose, indem Sie den folgenden Befehl ausführen.
sudo apt install -y docker.io docker-compose -y
Starten Sie nach Abschluss der Installation den Docker-Dienst und fügen Sie ihn der Startzeit hinzu.
sudo systemctl docker starten
sudo systemctl docker aktivieren
Docker läuft und Docker-compose wurde installiert. Überprüfen Sie dies mit dem folgenden Befehl.
Docker-Version
Docker-Compose-Version
Und Ihnen wird die auf Ihrem System installierte Version von Docker und Docker-compose angezeigt.
Schritt 3 – Private Docker-Registrierung einrichten
In diesem Schritt konfigurieren wir die Docker-Registrierungsumgebung, indem wir einige Verzeichnisse erstellen und einige Konfigurationen erstellen, einschließlich docker-compose.yml, virtueller nginx-Host und zusätzliche Konfiguration usw.
- Erstellen Sie Projektverzeichnisse
Erstellen Sie ein neues Verzeichnis für das Projekt namens „registry“ und erstellen Sie darin die Verzeichnisse „nginx“ und „auth“.
mkdir -p Registry/{nginx,auth}
Gehen Sie danach in das Verzeichnis ‚registry‘ und erstellen Sie innerhalb von ‚nginx‘ erneut neue Verzeichnisse.
CD-Registry/
mkdir -p nginx/{conf.d/,ssl}
Und als Ergebnis sehen die Projektverzeichnisse wie im folgenden Bild aus.
Baum
- Docker-Compose-Skript erstellen
Jetzt wollen wir ein neues docker-compose.yml-Skript zum Deployment der Docker Registry erstellen.
Gehen Sie in das Verzeichnis „registry“ und erstellen Sie eine neue Konfigurationsdatei „docker-compose.yml“.
CD-Registry/
vim docker-compose.yml
Definieren Sie zunächst die Compose-Version, die Sie verwenden möchten, und den Dienst.
Version:'3'
Dienste:
Fügen Sie danach den ersten Dienst namens „registry“ hinzu. Der Docker-Registrierungsdienst verwendet das Docker-Image, das vom Docker-Team „registry:2. Es wird das Docker-Volume „registrydata“ und das lokale Verzeichnis mit dem Namen „auth“ bereitstellen, das die grundlegende Authentifizierungsdatei „registry.passwd“ enthält. Und zuletzt wird es auf dem benutzerdefinierten Docker-Image namens „mynet“ ausgeführt und den Port 5000 sowohl auf dem Container als auch auf dem Host verfügbar machen.
#Registry Registry:Image:Registry:2 Neustart:immer Ports:- "5000:5000" Umgebung:REGISTRY_AUTH:htpasswd REGISTRY_AUTH_HTPASSWD_REALM:Registry-Realm REGISTRY_AUTH_HTPASSWD_PATH:/auth/registry.passwd REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY:/Datenvolumen:- Registrydata:/data - ./auth:/auth networks:- mynet
Als nächstes die Konfiguration des „nginx“-Dienstes, der HTTP- und HTTPS-Ports ausführt und das lokale Verzeichnis „conf.d“ für die Konfiguration des virtuellen Hosts und „ssl“ für SSL-Zertifikate einbindet.
#Nginx Service nginx:image:nginx:alpine container_name:nginx restart:until-stopped tty:true ports:- "80:80" - "443:443" volumes:- ./nginx/conf.d/:/etc/nginx/conf.d/ - ./nginx/ssl/:/etc/nginx/ssl/ networks:- mynet
Und zuletzt definieren Sie das benutzerdefinierte Netzwerk „mynet“ mit Bridge-Treiber und die „registrydata“ mit einem lokalen Treiber.
#Docker Networksnetworks:mynet:driver:bridge#Volumesvolumes:Registrydata:driver:local
Speichern und schließen Sie die Konfiguration.
Unten ist die vollständige Konfiguration:
Version:'3'services:#Registry Registry:Image:Registry:2 Neustart:immer Ports:- "5000:5000" Umgebung:REGISTRY_AUTH:htpasswd REGISTRY_AUTH_HTPASSWD_REALM:Registry-Realm REGISTRY_AUTH_HTPASSWD_PATH:/auth/registry.passwd REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY:/Datenvolumen:- Registrierungsdaten:/Daten - ./auth:/auth Netzwerke:- mynet#Nginx Service nginx:image:nginx:alpine container_name:nginx restart:until-stopped tty:true ports:- "80:80" - "443:443" Volumes:- ./nginx/conf.d/:/etc/nginx/conf.d/ - ./nginx/ssl/:/etc/nginx/ssl/ Netzwerke:- mynet#Docker Networksnetworks:mynet :Treiber:Bridge#VolumesVolumes:Registrierungsdaten:Treiber:Lokal
- Konfigurieren Sie den virtuellen Nginx-Host
Nach dem Erstellen des Docker-Compose-Skripts erstellen wir den virtuellen Host und zusätzliche Konfigurationen für den nginx-Dienst.
Gehen Sie in das Verzeichnis ‚nginx/conf.d/‘ und erstellen Sie eine neue virtuelle Hostdatei namens ‚registry.conf‘.
cd nginx/conf.d/
vim-registrierung.conf
Fügen Sie die folgende Konfiguration ein.
upstream docker-registry { Server Registry:5000;}server { listen 80; server_name registrierung.hakase-labs.io; return 301 https://registry.hakase-labs.io$request_uri;}server { listen 443 ssl http2; server_name registrierung.hakase-labs.io; ssl_certificate /etc/nginx/ssl/fullchain.pem; ssl_certificate_key /etc/nginx/ssl/privkey.pem; # Protokolldateien für Debug error_log /var/log/nginx/error.log; access_log /var/log/nginx/access.log; location / { # Keine Verbindungen von Docker 1.5 und früher zulassen # Docker vor 1.6.0 hat den Benutzeragenten nicht richtig auf Ping gesetzt, fangen Sie "Go *" Benutzeragenten ab, wenn ($http_user_agent ~ "^(docker\/1\ .(3|4|5(?!\.[0-9]-dev))|Go ).*$" ) { return 404; } 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 $schema; Proxy_read_timeout 900; }}
Speichern und schließen.
Erstellen Sie als Nächstes eine zusätzliche Konfiguration, um die max_body_size auf nginx zu erhöhen. Dadurch können Sie Docker-Images mit einer maximalen Größe von 2 GB hochladen.
vim-additional.conf
Konfiguration unten einfügen.
client_max_body_size 2G;
Speichern und schließen.
- SSL-Zertifikat und Basisauthentifizierung konfigurieren
Kopieren Sie die SSL-Zertifikatsdateien Ihrer Domain in das Verzeichnis „ssl“.
cp /path/to/ssl/fullchain.pem ssl/
cp /path/to/ssl/privkey.pem ssl/
Gehen Sie nun in das Verzeichnis ‚auth‘ und erzeugen Sie die neue Passwortdatei ‚registry.passwd‘.
CD-Authentifizierung/
Generieren Sie ein neues Passwort für den Benutzer hakase.
htpasswd -Bc registration.passwd hakase
GEBEN SIE DAS STARKE PASSWORT EIN
Und die Einrichtung der Umgebung für die Bereitstellung der privaten Docker-Registrierung wurde abgeschlossen.
Unten ist der Screenshot unserer Umgebungsdateien und -verzeichnisse.
Baum
– Führen Sie die Docker-Registrierung aus
Führen Sie die Docker-Registrierung mit dem Befehl docker-compose unten aus.
docker-compose up -d
Und Sie erhalten das Ergebnis wie folgt.
Stellen Sie danach sicher, dass die Registrierung und der Nginx-Dienst betriebsbereit sind. Überprüfen Sie dies mit dem folgenden Befehl.
docker-compose ps
netstat -plntu
Und Ihnen wird angezeigt, dass der Dienst „registry“ auf Port „5000“ ausgeführt wird, und der Dienst „nginx“ zeigt die HTTP- und HTTPS-Ports wie folgt an.
Schritt 4 – Testen
Bevor wir unsere private Docker-Registrierung testen, müssen wir das Root-CA-Zertifikat zum Docker selbst und zum System hinzufügen.
Wenn Sie das PEM-Dateizertifikat verwenden, exportieren Sie es mit dem OpenSSL-Befehl in die .crt-Datei.
openssl x509 -in rootCA.pem -inform PEM -out rootCA.crt
Erstellen Sie nun ein neues Verzeichnis für das Docker-Zertifikat und kopieren Sie das Root-CA-Zertifikat hinein.
mkdir -p /etc/docker/certs.d/registry.hakase-labs.io/
cp rootCA.crt /etc/docker/certs.d/registry.hakase-labs.io/Erstellen Sie dann ein neues Verzeichnis „/usr/share/ca-certificate/extra“ und kopieren Sie das Root-CA-Zertifikat hinein.
mkdir -p /usr/share/ca-certificates/extra/
cp rootCA.crt /usr/share/ca-certificates/extra/Konfigurieren Sie danach das Paket „ca-certificate“ neu und starten Sie den Docker-Dienst neu.
dpkg-reconfigure ca-certificates
systemctl docker neu starten
- Docker-Image herunterladen
Laden Sie das neue Docker-Image mit dem folgenden Befehl herunter.
docker pull ubuntu:16.04Wenn es fertig ist, markieren Sie das Image für die private Registrierung mit dem folgenden Befehl.
Docker-Image-Tag ubuntu:16.04 Registry.hakase-labs.io/ubuntu16Überprüfen Sie erneut die Liste der Docker-Images auf dem System und Sie erhalten neue Images wie unten.
Docker-Images
- Bild in private lokale Registrierung übertragen
Melden Sie sich mit dem folgenden Befehl bei der privaten Docker-Registrierung an.
Docker-Login https://registry.hakase-labs.io/v2/Geben Sie den Benutzernamen und das Passwort basierend auf der Datei „registry.htpasswd“ ein.
Überprüfen Sie nun die Verfügbarkeit des Docker-Images in der Registrierung.
http -a hakase https://registry.hakase-labs.io/v2/_catalogUnd es gibt kein Docker-Image in der Registrierung.
Pushen Sie jetzt unser benutzerdefiniertes Image in die private Docker-Registrierung.
docker push-registrierung.hakase-labs.io/ubuntu16Überprüfen Sie es erneut und stellen Sie sicher, dass Sie das Docker-Image „ubuntu16“ im privaten Repository erhalten.
http -a hakase https://registry.hakase-labs.io/v2/_catalog
Und schließlich wurde die Installation und Konfiguration der privaten Docker-Registrierung mit Nginx und Basisauthentifizierung erfolgreich abgeschlossen.