Für eine reibungslose CI/CD-Entwicklung mit der Docker-Plattform sollten Sie die Verwendung eines selbst gehosteten Docker-Registrierungsservers in Betracht ziehen. Die Docker-Registrierung ist das Repository, in dem Sie Ihre Docker-Images speichern und abrufen können, um Anwendungen auf dem Server auszuführen. Für eine schnellere Bereitstellung sowie eine sichere Infrastruktur wird empfohlen, Ihre eigene private Docker-Registrierung einzurichten, um Ihre Docker-Images zu speichern und unter Organisationen zu verteilen. In diesem Artikel erfahren Sie, wie Sie eine private Docker-Registrierung unter Ubuntu 20.04 einrichten
Voraussetzungen
- Benutzerkonto mit sudo-Berechtigungen
- Ein Server für die Docker-Registrierung
- Nginx auf dem Docker Registry-Server
- Ein Client-Server
- Docker und Docker-Compose auf beiden Servern.
Private Docker-Registrierung
Docker Registry ist eine serverseitige Anwendung, mit der Sie Ihre Docker-Images lokal an einem zentralen Ort speichern können. Indem Sie Ihren eigenen Docker-Registrierungsserver einrichten, können Sie Docker-Images ziehen und übertragen, ohne eine Verbindung zum Docker-Hub herstellen zu müssen, was Ihre Bandbreite spart und Sie vor Sicherheitsbedrohungen schützt.
Auch lesen :So installieren und verwenden Sie Docker unter Ubuntu 20.04 / 20.10
Bevor Sie beginnen
Bevor ich beginne, stelle ich sicher, dass Sie Docker und Docker-Compose sowohl auf dem Client-Server als auch auf dem lokalen Registrierungsserver installiert haben. Um zu überprüfen, ob Sie die erforderliche Software installiert haben, können Sie die folgenden Befehle ausführen, um die Softwareversion zu überprüfen.
$ Docker-Version
$ docker-compose-Version
Außerdem müssen Sie sicherstellen, dass der Docker-Dienst gestartet und so eingerichtet ist, dass er beim Booten aktiviert wird:
$ sudo systemctl docker starten$ sudo systemctl docker aktivieren
Installieren und konfigurieren Sie die private Docker-Registrierung
Führen Sie die folgenden Schritte aus, um die private Docker-Registrierung zu konfigurieren:
Registrierungsverzeichnisse erstellen
Konfigurieren Sie Ihren Server, der eine private Registrierung hosten soll. Erstellen Sie ein neues Verzeichnis, in dem alle erforderlichen Konfigurationsdateien gespeichert werden.
Verwenden Sie den folgenden Befehl, um ein neues Projektverzeichnis „my-registry“ und zwei Unterverzeichnisse „nginx“ und „auth“ zu erstellen. Sie können Ihre eigene Annahme für den Projektnamen haben.
$ mkdir -p my-registry/{nginx, auth}
Navigieren Sie nun zum Projektverzeichnis und erstellen Sie neue Verzeichnisse in nginx als:
$ cd my-registry/$ mkdir -p nginx/{conf.d/, ssl}
Erstellen Sie Docker-Compose-Skript und -Dienste
Sie müssen ein neues docker-compose.yml-Skript erstellen, das die docker-compose-Version und die Dienste definiert, die zum Einrichten einer privaten Registrierung erforderlich sind.
Erstellen Sie mit dem vi-Editor eine neue Datei „docker-compose.yml“ im Verzeichnis „my-registry“.
$ vi docker-compose.yml
Definieren Sie Ihren Dienst in der docker-compose-Datei als:
Services:myregistrydata:/data - ./auth:/auth networks: - 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: myregistrydata: driver:local
Speichern und schließen Sie die Datei
Nginx-Portweiterleitung einrichten
Wir müssen eine virtuelle nginx-Hostkonfiguration für den nginx-Webdienst erstellen. Wechseln Sie in das im obigen Schritt erstellte Verzeichnis nginx/conf.d/.
$ cd nginx/conf.d/
Erstellen Sie nun mit Ihrem Texteditor eine virtuelle nginx-Hostdatei. In diesem Beispiel werde ich es myregistry.conf nennen. Sie können Ihre eigene Annahme haben.
$ vi meineregistrierung.conf
Fügen Sie den folgenden Inhalt hinzu:
Upstream Docker-Registry { Server Registry:5000;}Server { listen 80; server_name registrierung.linuxtechi.com; return 301 https://registry.linuxtechi.com$request_uri;}server { listen 443 ssl http2; server_name registrierung.linuxtechi.com; ssl_certificate /etc/nginx/ssl/certificate.crt; ssl_certificate_key /etc/nginx/ssl/private.key; # Protokolldateien für Debug error_log /var/log/nginx/error.log; access_log /var/log/nginx/access.log; location / { if ($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; }}
Ersetzen Sie Ihren Domänennamen durch den Parameter server_name und speichern Sie die Datei.
Upload-Größe der nginx-Datei erhöhen
Standardmäßig hat nginx ein Limit von 1 MB zum Hochladen von Dateien. Da Docker-Bilder dieses Limit überschreiten, müssen Sie die Upload-Größe in der nginx-Konfigurationsdatei erhöhen. In diesem Beispiel erstelle ich eine zusätzliche Nginx-Konfigurationsdatei mit einem Upload-Limit von 2 GB .
Gehen Sie zum nginx-Konfigurationsverzeichnis
$ cd myregistry/nginx/conf.d$ vi zusätzliche.conf
Fügen Sie die folgende Zeile hinzu und speichern Sie die Datei
client_max_body_size 2G;
SSL-Zertifikat und Authentifizierung konfigurieren
Nach dem Erstellen der Nginx-Konfigurationsdatei müssen wir nun ein SSL-Zertifikat einrichten. Sie sollten über eine gültige SSL-Zertifikatsdatei mit einem privaten Schlüssel verfügen. Kopieren Sie Ihre Zertifikatsdatei und Ihren privaten Schlüssel in das Verzeichnis nginx/ssl als:
$ cd myregistry/nginx/ssl$ cp /your-ssl-certificate-path/certificate.crt .$ cp /your-private-key-path/private.key .
Wenn Sie kein gültiges gekauftes SSL-Zertifikat haben, können Sie Ihr eigenes selbst signiertes SSL-Zertifikat generieren. Denken Sie daran, dass ein selbstsigniertes SSL-Zertifikat für Produktionsumgebungen nicht empfohlen wird. Führen Sie den folgenden Befehl aus, um ein selbstsigniertes SSL-Zertifikat zu generieren:
$ sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout \ /etc/ssl/private/nginx-private.key -out /etc/ssl/certs/nginx-certificate.crtSie werden aufgefordert, einige Details wie Ländercode, Domänenname und E-Mail-ID anzugeben. Füllen Sie die Details aus und fahren Sie fort.
Richten Sie jetzt die Standardauthentifizierung ein als:
Wechseln Sie in das Authentifizierungsverzeichnis
$ cd authFordern Sie eine neue Kennwortdatei mit dem Namen „registry.password“ für Ihren Benutzer an. In diesem Beispiel verwende ich linuxtechi user.
$ htpasswd -Bc registrierung.kennwort linuxtechiWenn Sie den Befehl „htpasswd not found“ erhalten, führen Sie den folgenden Befehl in Ihrem Terminal aus und versuchen Sie es erneut.
$ sudo apt install apache2-utils -yGeben Sie ein starkes Passwort ein und geben Sie es erneut ein, um Ihr Passwort zu bestätigen. Sie haben einen Basisauthentifizierungsbenutzer für die Docker-Registrierung hinzugefügt.
Docker-Registrierung ausführen
Sie haben die Einrichtung abgeschlossen. Sie können die Registrierung mit dem Befehl docker-compose erstellen.
Gehen Sie in das Verzeichnis, in dem wir die Datei docker-compose.yml erstellen
$ cd meineregistrierungFühren Sie nun den folgenden Befehl aus:
$ docker-compose up -dDie Docker-Registrierung ist jetzt aktiv, Sie können die laufenden Container mit dem folgenden Befehl überprüfen:
$ docker ps -aSie erhalten folgende Ausgabe:
Image von Docker Hub in eine private Registrierung ziehen
Um ein Image vom Docker-Hub in der privaten Registrierung zu speichern, verwenden Sie den Docker-Pull-Befehl, um Docker-Images vom Docker-Hub abzurufen. In diesem Beispiel werde ich das Docker-Image von Centos abrufen.
$ docker pull centosNachdem Sie Images erfolgreich vom Docker-Hub abgerufen haben, markieren Sie ein Image, um es für die private Registrierung zu kennzeichnen.
In diesem Beispiel werde ich Centos-Images als taggen:registration.linuxtechi.com/linuxtechi-centos
$ Docker-Image-Tag [Image-Name] Registry.linuxtechi.com/[neuer-Image-Name]
Beispiel:
$-Docker-Images-Tag Centos-Registry.linuxtechi.com/linuxtechi-centosFühren Sie den folgenden Befehl aus, um zu überprüfen, ob das Docker-Image lokal verfügbar ist oder nicht.
$ Docker-BilderDocker-Image in private Registry übertragen
Sie haben das Docker-Image vom Docker-Hub abgerufen und ein Tag für die private Registrierung erstellt. Jetzt müssen Sie das lokale Docker-Image in die private Registrierung verschieben.
Melden Sie sich zunächst mit dem folgenden Befehl bei Ihrer privaten Registrierung an:
$ Docker-Login https://registry.linuxtechi.com/v2/Verwenden Sie Ihre eigene Registrierungs-URL anstelle von „https://registry.linuxtechi.com“
Sie werden nach Benutzername und Passwort gefragt; Sie erhalten eine Meldung über die erfolgreiche Anmeldung als:
Jetzt können Sie Ihr Docker-Image in eine private Registry verschieben. Führen Sie den folgenden Befehl aus, um ein Bild zu übertragen:
$ docker push-registrierung.linuxtechi.com/linuxtechi-centosErsetzen Sie Ihren Bildnamen nach „docker push“
Sobald der Push abgeschlossen ist, können Sie zum Browser gehen und die URL eingeben:
https://registry.linuxtechi.com/v2/_catalog
Ersetzen Sie „registry.linuxtechi.com“ durch Ihre eigene URL und stellen Sie eine grundlegende Authentifizierung bereit. Sie finden die Repositories-Liste als :
Docker-Image aus privater Registrierung abrufen
Sie haben Ihr lokales Docker-Image in Ihre private Docker-Registrierung gepusht. Auf die gleiche Weise können Sie Docker-Images aus Ihrer privaten Docker-Registrierung auf den lokalen Server ziehen.
Führen Sie den folgenden Befehl aus, um sich bei Ihrem privaten Registrierungsserver anzumelden.
$ Docker-Login https://registry.linuxtechi.comErsetzen Sie „registry.linuxtechi.com“ durch Ihre eigene private Registrierungs-URL und stellen Sie eine grundlegende Authentifizierung bereit. Führen Sie nach erfolgreicher Anmeldung den folgenden Befehl aus, um das Docker-Image aus der privaten Registrierung abzurufen. In diesem Beispiel werde ich ein zuvor gepushtes Docker-Image auf dem lokalen Server abrufen. Sie können Ihre eigene Annahme für den Docker-Image-Namen haben.
$ Docker-Pull-Registry.linuxtechi.com/linuxtechi-centosSie erhalten eine ähnliche Ausgabe wie:
Schlussfolgerung:
In dem Artikel haben Sie erfahren, wie Sie Ihre eigene private Docker-Registry hosten können. Außerdem haben Sie eine Vorstellung davon, wie Sie Bilder vom Docker-Hub auf den lokalen Server ziehen, das Bild markieren und in die private Registrierung übertragen. Sie haben auch gelernt, wie man Docker-Images aus der privaten Registrierung auf dem lokalen Server zieht.
Auch lesen :So installieren Sie KVM auf Ubuntu 20.04 LTS Server (Focal Fossa)