GNU/Linux >> LINUX-Kenntnisse >  >> Ubuntu

So richten Sie eine private Docker-Registrierung ein und verwenden sie

Einführung

Wenn Sie eine reibungslose CI/CD-Entwicklung mit der Docker-Plattform sicherstellen möchten, sollten Sie die Einrichtung einer privaten Docker-Registrierung in Erwägung ziehen. Es beschleunigt nicht nur die Bereitstellung, sondern ist auch eine praktische Methode zur Verteilung von Ressourcen und zur gemeinsamen Nutzung von Docker-Images zwischen Containern.

In diesem Tutorial erfahren Sie, wie Sie eine private Docker-Registrierung einrichten und für den externen Zugriff konfigurieren.

Voraussetzungen

  • Zugriff auf ein Benutzerkonto mit sudo oder root Privilegien
  • Ein Client-Server
  • Ein Server für die private Docker-Registrierung
  • Docker und Docker–Compose auf beiden Servern
  • Nginx auf dem privaten Docker Registry-Server

Was ist eine private Docker-Registrierung

Docker-Registrierung ist eine serverseitige Anwendung und Teil des Platform-as-a-Service-Produkts von Docker. Es ermöglicht Ihnen, alle Ihre Docker-Images lokal an einem zentralen Ort zu speichern.

Wenn Sie eine private Registrierung einrichten, weisen Sie einen Server zu, der über das Internet mit Docker Hub kommuniziert. Die Rolle des Servers besteht darin, Images zu ziehen und zu verschieben, sie lokal zu speichern und sie mit anderen Docker-Hosts zu teilen.

Durch den Betrieb einer extern zugänglichen Registrierung können Sie wertvolle Ressourcen sparen und Prozesse beschleunigen. Mit der Software können Sie Images abrufen, ohne eine Verbindung zum Docker-Hub herstellen zu müssen, wodurch Bandbreite gespart und das System vor potenziellen Online-Bedrohungen geschützt wird.

Docker-Hosts können über eine sichere Verbindung auf das lokale Repository zugreifen und Images aus der lokalen Registrierung kopieren, um ihre eigenen Container zu erstellen.

Bevor Sie beginnen

Wie im Abschnitt „Voraussetzungen“ aufgeführt, geht das Handbuch davon aus, dass Docker und Docker-Compose bereits auf allen Servern installiert sind.

Um zu überprüfen, ob Sie über die erforderliche Software verfügen, können Sie ihre Release-Versionen mit den folgenden Befehlen überprüfen:

docker version
docker-compose version

Außerdem sollten Sie sicherstellen, dass der Docker-Dienst gestartet wurde und so eingerichtet ist, dass er beim Booten aktiviert wird:

sudo systemctl start docker
sudo systemctl enable docker

Installieren und konfigurieren Sie die private Docker-Registrierung

Schritt 1:Registrierungsverzeichnisse erstellen

Beginnen Sie mit der Konfiguration des Servers, der die private Registry hosten soll. Sie möchten zuerst ein neues Verzeichnis erstellen, in dem alle erforderlichen Konfigurationsdateien gespeichert werden.

1. Der folgende Befehl erstellt ein neues Projektverzeichnis mit der Bezeichnung registry und zwei Unterverzeichnisse - nginx und auth :

mkdir -p registry/{nginx, auth}

2. Wechseln Sie in die registry und erstellen Sie zwei neue Verzeichnisse in nginx :

cd registry/
mkdir -p nginx/{conf.d/,ssl}

3. Zeigen Sie die Hierarchie der neu erstellten Verzeichnisse an, indem Sie Folgendes eingeben:

tree

Schritt 2:Docker-Compose-Skript erstellen und Dienste definieren

Als Nächstes müssen Sie eine neue docker-compose.yml erstellen und konfigurieren Skript. Das Skript definiert die Docker-Compose-Version sowie die Dienste, die Sie zum Einrichten einer privaten Registrierung benötigen.

1. Erstellen Sie eine neue Datei, während Sie sich in der registry befinden Verzeichnis, mit einem Texteditor Ihrer Wahl:

nano docker-compose.yml

2. Es gibt ein paar Dinge, die Sie in dieser Konfigurationsdatei definieren müssen, also folgen Sie genau und fügen Sie jeden Abschnitt des Inhalts sorgfältig hinzu:

version: '3'
services:
#Registry
  registry:
    image: registry:2
    restart: always
    ports:
    - "5000:5000"
    environment:
      REGISTRY_AUTH: htpasswd
      REGISTRY_AUTH_HTPASSWD_REALM: Registry-Realm
      REGISTRY_AUTH_HTPASSWD_PATH: /auth/registry.passwd
      REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY: /data
    volumes:
      - registrydata:/data
      - ./auth:/auth
    networks:
      - mynet
#Nginx Service
  nginx:
    image: nginx:alpine
    container_name: nginx
    restart: unless-stopped
    tty: true
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx/conf.d/:/etc/nginx/conf.d/
      - ./nginx/ssl/:/etc/nginx/ssl/
    networks:
      - mynet
#Docker Networks
networks:
  mynet:
    driver: bridge
#Volumes
volumes:
  registrydata:
    driver: local

3. Speichern und schließen Sie die Datei.

Die Konfiguration erklärt:

Zunächst definieren Sie die Version von Docker-Compose, die Sie verwenden möchten. In diesem Beispiel ist es version: '3' . Dann fahren Sie mit der Definition aller Komponenten der Docker-Registrierung fort, beginnend mit #Registry Dienst.

Docker Registry ist im Wesentlichen ein Container, der das Registrierungs-Image ausführt, weshalb das Image als registry:2 definiert ist .

restart: always hinzufügen line stellt sicher, dass Sie Docker Registry als Dienst starten, sobald Sie das System hochfahren.

Ermittlung der Ports 5000:5000 weist Docker an, dass der Host und der laufende Container über die definierten Portnummern kommunizieren.

Der Dienst stellt das Docker-Volume registrydata bereit und das lokale Verzeichnis auth , zusammen mit seiner Authentifizierungsdatei registry.passwd .

Das nächste Element ist der #Nginx Service . Die Konfiguration beschreibt, dass der Dienst auf den Ports 80:80 ausgeführt wird (HTTPS) und 443:443 (HTTPS). Es wird das lokale Verzeichnis für die virtuelle Konfiguration bereitgestellt (conf.d ) und SSL-Zertifikate (ssl ).

Stellen Sie schließlich mynet ein mit einem Brückentreiber und den registrydata mit einem lokalen Treiber als Parameter für das benutzerdefinierte Netzwerk.

Schritt 3:Richten Sie die Nginx-Portweiterleitung ein

Der nächste Schritt besteht darin, einen virtuellen Nginx-Host zu konfigurieren und ihn für den Nginx-Dienst zu konfigurieren.

1. Wechseln Sie zu nginx/conf.d/ Verzeichnis, das Sie im vorherigen Schritt erstellt haben:

cd nginx/conf.d/

2. Erstellen Sie eine neue virtuelle Hostdatei namens registry.conf :

nano registry.conf

3. Fügen Sie den folgenden Inhalt hinzu:

upstream docker-registry {
    server registry:5000;
}

server {
    listen 80;
    server_name registry.example-server.com;
    return 301 https://registry.example-server.com$request_uri;
}

server {
    listen 443 ssl http2;
    server_name registry.example-server.com;

    ssl_certificate /etc/nginx/ssl/fullchain.pem;
    ssl_certificate_key /etc/nginx/ssl/privkey.pem;

    # Log files for Debug
    error_log  /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;

    location / {
        # Do not allow connections from docker 1.5 and earlier
        # docker pre-1.6.0 did not properly set the user agent on ping, catch "Go *" user agents
        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 $scheme;
        proxy_read_timeout                  900;
    }

}

4. Speichern Sie die Datei und kehren Sie zur Terminal-Shell zurück.

Schritt 4:Erhöhen Sie die Upload-Größe der Nginx-Datei

Standardmäßig begrenzt Nginx die Größe des Datei-Uploads auf 1 MB . Da viele Docker-Images diese Zahl überschreiten, empfiehlt es sich, die maximale Dateigröße auf Nginx zu erhöhen. Stellen Sie sicher, dass Sie Bilder mit größerer Dateigröße hochladen können, indem Sie max_body_size festlegen auf 2 GB .

1. Erstellen Sie eine zusätzliche Konfigurationsdatei mit:

nano additional.conf

2. Fügen Sie der Datei die folgende Zeile hinzu:

client_max_body_size 2G;

3. Speichern und schließen Sie die Datei.

Schritt 5:SSL-Zertifikat und Basisauthentifizierung konfigurieren

1. Die SSL-Zertifikatsdateien Ihrer Domain müssen in den ssl kopiert werden Verzeichnis. Führen Sie dazu die Befehle aus:

cp /path/to/ssl/fullchain.pem ssl/
cp /path/to/ssl/privkey.pem ssl/

2. Wechseln Sie dann zu auth Verzeichnis:

cd auth

3. Und fordern Sie eine neue Passwortdatei namens registry.passwd an für Ihren Benutzer:

htpasswd -Bc registry.passwd example

4. Geben Sie ein starkes Passwort ein und wiederholen Sie es zur Bestätigung. Damit haben Sie Ihrem Benutzer ein Passwort hinzugefügt.

Schritt 6:Root-CA-Zertifikat hinzufügen

Jetzt müssen Sie Docker und dem System, an dem Sie arbeiten, das Root-CA-Zertifikat hinzufügen.

1. Exportieren Sie die .crt Datei mit OpenSSL durch Eingabe von:

openssl x509 -in rootCA.pem -inform PEM -out rootCA.crt

2. Kopieren Sie das Root-Zertifikat in ein neues Verzeichnis für Docker-Zertifikate:

mkdir -p /etc/docker/certs.d/registry.example-server.com/
cp rootCA.crt /etc/docker/certs.d/example-server.com/

3. Kopieren Sie als Nächstes dasselbe Zertifikat in ein anderes neues Verzeichnis unter dem Namen /usr/share/ca-certificate/extra :

mkdir -p .usr.share.ca-certificates/extra/
cp rootCA.crt /usr/share/ca-certificates/extra/

4. Konfigurieren Sie das neu erstellte ca-certificate neu Paket durch Eingabe von:

dpkg-reconfigure ca-certificates

5. Starten Sie abschließend den Docker-Dienst neu:

systemctl restart docker

Schritt 7:Docker-Registrierung ausführen

Wenn alles eingerichtet und bereit ist, können Sie den Docker Registry-Container mit Docker-Compose erstellen:

docker-compose up -d

Überprüfen Sie, ob die Registrierung und die Nginx-Dienste ausgeführt werden:

docker-compose ps
netstat -plntu

Die Ausgabe sollte Ihnen die Dienste und ihre zugewiesenen Ports zeigen.

Image von Docker Hub in eine private Registry ziehen

1. Um ein Image von Docker Hub lokal in Ihrer privaten Registrierung zu speichern, verwenden Sie docker pull Befehl:

docker pull [docker_image]

2. Fügen Sie dem Image ein Tag hinzu, um es für die private Registrierung zu kennzeichnen:

docker image tag [docker_image] registry.example-server.com/[new_image_name]

3. Sie können überprüfen, ob das Docker-Image lokal verfügbar ist, indem Sie das System auffordern, alle lokal gespeicherten Images aufzulisten:

docker images

So übertragen Sie das Docker-Image in die private Registry

1. Um ein Image von einem Docker-Host auf den privaten Docker-Registrierungsserver zu pushen, müssen Sie sich zuerst mit dem folgenden Befehl bei der Registrierung anmelden:

docker login https://registry.example-server.com/v2/

2. Geben Sie den Benutzernamen ein und Passwort Sie für den virtuellen Host definiert haben.

3. Jetzt können Sie Ihr Image mit folgendem Befehl in die private Registry verschieben:

docker push registry.example-server.com/[new_image_name]

4. Sehen Sie sich eine Liste der Images an, die in der privaten Docker-Registrierung gespeichert sind:

http -a example https://registry.example-server.com/v2/_catalog

Ubuntu
  1. So legen Sie das Docker-Speicher- und CPU-Nutzungslimit fest

  2. NFS-Docker-Volumes:Erstellen und Verwenden

  3. So installieren und verwenden Sie Docker unter Ubuntu 20.04

  4. Anleitung zum Einrichten einer privaten Docker-Registrierung unter Rocky Linux 8

  5. So installieren und verwenden Sie Docker in Ubuntu 20.04

So richten Sie eine private Docker-Registrierung unter Ubuntu 20.04 ein

So installieren und konfigurieren Sie Docker unter Ubuntu 18.04

So richten Sie eine private Docker-Registrierung unter Ubuntu 18.04 LTS ein

So installieren und verwenden Sie Docker Compose unter Ubuntu 20.04

So installieren und verwenden Sie Docker unter Ubuntu 22.04

So installieren und verwenden Sie Docker unter AlmaLinux 8