GNU/Linux >> LINUX-Kenntnisse >  >> Panels >> Docker

So erstellen Sie eine private Docker-Registrierung unter Ubuntu Linux

Suchen Sie nach einem Ort, an dem Sie Ihre benutzerdefinierten Docker-Images für Ihre persönlichen Projekte sicher speichern oder in Ihrer Organisation verwenden können? Oder vielleicht ein zentralisiertes System zur Verwaltung Ihrer Continuous-Integration- und Deployment-Prozesse? Ein Ort, an dem Sie Ihre benutzerdefinierten Images für Ihre Anwendung nach Belieben abrufen und hochladen und die Bereitstellungsrate verbessern können?

Suchen Sie nicht weiter! Eine private Docker-Registrierung macht all das möglich! Dieses Schritt-für-Schritt-Tutorial führt Sie durch den Aufbau Ihrer eigenen privaten Docker-Registrierung. Tauchen Sie ein, um loszulegen!

Voraussetzungen

Stellen Sie sicher, dass Sie Folgendes haben, um diesem Tutorial zu folgen:

  • Zwei Ubuntu 20.04 LTS Geräte. Einer hostet die Docker-Registrierung und der andere fungiert als Client-Computer, um Anforderungen an Ihre Docker-Registrierung zu senden.
  • NGINX wird nur auf dem Hostcomputer zum Einrichten der SSL-Verschlüsselung und der HTTP-Authentifizierung benötigt.
  • Ein registrierter Domänenname. NGINX leitet den Datenverkehr zu Ihrem registrierten Domänennamen an Ihre Docker-Registrierung weiter, die in einem Container ausgeführt wird.
  • Für dieses Tutorial benötigen Sie Docker sowohl auf dem Host- als auch auf dem Client-Rechner. Die Standardinstallation ist ausreichend.
  • Docker-compose in der Hostmaschine der Docker-Registrierung, um die Komponenten für Ihre Docker-Registrierung einzurichten und zu starten. Verwandt:Alles, was Sie über die Verwendung von Docker Compose wissen müssen

Einrichten der Docker-Registrierung

Der erste Schritt, den Sie unternehmen müssen, besteht darin, die Docker-Registrierung auf dem Hostgerät einzurichten, die als kostenloses Image auf Docker Hub bereitgestellt wird.

Anstatt darauf beschränkt zu sein, Docker-Befehle auszuführen, um diese Aufgabe auszuführen, erstellen Sie eine docker-compose.yml Datei. Die Datei verwendet das Docker-Compose-Dateiformat und kann die für die Docker-Registrierung erforderlichen Komponenten relativ einfach einrichten.

Um mitzumachen, öffnen Sie Ihren bevorzugten SSH-Client und stellen Sie eine Verbindung zu dem Gerät her, das der Registrierungsserver sein wird.

1. Im /home erstellen Sie ein Verzeichnis namens docker-registry mit dem mkdir Befehl:

# Creating working directory
mkdir docker-registry

2. Navigieren Sie zur Docker-Registry Verzeichnis:

# Navigate to the working directory
cd ~/docker-registry

3. Innerhalb der Docker-Registrierung erstellen Sie ein Unterverzeichnis namens data . Innerhalb der Daten Verzeichnis speichert die Docker-Registrierung die Docker-Images. Die Daten Das Verzeichnis fungiert als Dateisystem für die Docker-Registrierung, um die Docker-Images beizubehalten.

# Create filesystem to persist data
mkdir data

4. Innerhalb der Docker-Registrierung erstellen Sie eine docker-compose.yml Datei:

# Create the docker-compose file
nano docker-compose.yml 

In der neu erstellten Datei finden Sie Konfigurationen zum Setzen der Registry. Unter den Einstellungen werden Sie bemerken:

  • Legt die registry fest Dienst mit dem registry:latest Bild mit dem latest Tag.
  • Legt die Neustartrichtlinie für die registry fest Dienst zu always . Sofern die Docker-Engine läuft, wird die registry Der Dienst wird immer neu gestartet, wenn er gestoppt wird.
  • Die ports Abschnitt bildet den Port 5000 ab im Registrierungscontainer auf Port 5000 auf dem Host-Rechner.
  • Die registry Dienst in der environment Abschnitt legt die Umgebungsvariable REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY fest zu den Daten zuvor erstelltes Verzeichnis.
  • Docker benötigt ein Volume, um die Docker-Images in der registry zu speichern Container. Sie werden die volumes hinzufügen Objekt, um die /Daten zuzuordnen Verzeichnis auf dem Hostcomputer in das Verzeichnis /data Verzeichnis im Container.

Das Mapping speichert die Daten im Dateisystem des Hostcomputers und nicht im Container. Da Docker die Daten jetzt auf dem Hostcomputer speichert, können sie gesichert, migriert, verschlüsselt oder ersetzt werden.

Unten sehen Sie die vollständige YAML-Konfiguration für die Komponenten, die zum Starten und Ausführen der Docker-Registrierung erforderlich sind. Kopieren Sie den unten stehenden YAML-Code und fügen Sie ihn in docker-compose.yml ein Datei, die Sie erstellt haben, und speichern Sie sie mit CTRL + S und drücken Sie CTRL + X zum Beenden:

version: '3.3' 
services:
  registry:
    image: registry:latest 
		restart: always
    ports:
    - "5000:5000"
    environment:
      REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY: /data 
    volumes:
      - ./data:/data 

Docker-compose führt mehrere Container als eine einzige Anwendung aus. Die docker-compose.yml Datei konfiguriert diese mehreren Container als Teil von Diensten.

5. Führen Sie nun die Docker-Compose-Datei aus und erstellen und starten Sie die Docker-Registrierung:

# Start docker registry application
sudo docker-compose up

In der folgenden Befehlsausgabe sehen Sie, wie die Docker-Registrierung ausgeführt wird. Um die Anwendung zu schließen, drücken Sie CTRL + C .

Einrichten von NGINX

Nachdem Sie die Docker-Registrierung eingerichtet haben, ist es an der Zeit, NGINX auf dem Hostcomputer einzurichten. NGINX leitet den Datenverkehr von Clientgeräten an die Docker-Registrierung weiter. Für dieses Tutorial leiten Sie den Datenverkehr über einen Domänennamen weiter. Lesen Sie weiter, um diesen Schritt in Angriff zu nehmen.

Zunächst müssen Sie die NGINX-Portweiterleitung für Ihre Domain über /etc/nginx/sites-available/your_domain_name einrichten Datei.

1. Erstellen Sie die Datei mit dem folgenden Befehl:

# Creating configuration for your domain
sudo nano /etc/nginx/sites-available/your_domain_name 

Sie werden viele Verweise auf finden your_domain_name in den folgenden Abschnitten . Diese Zeichenfolge ist ein Platzhalter. Vergessen Sie nicht, ihn durch einen Domänennamen zu ersetzen, den Sie besitzen, wenn Sie die Befehle selbst ausprobieren. In den Beispielen Registry.joeshiett.xyz ist der ausgewählte Domänenname.

2. Kopieren Sie die folgende NGINX-Konfiguration und fügen Sie sie zu your_domain_name hinzu Datei, die Sie erstellt haben:

server {
	listen 80;
  # Replace your_domain_name with your domain name
  server_name your_domain_name;

    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://localhost:5000;
      proxy_set_header  Host              $http_host;   # required for docker client's sake
      proxy_set_header  X-Real-IP         $remote_addr; # pass on real client's IP
      proxy_set_header  X-Forwarded-For   $proxy_add_x_forwarded_for;
      proxy_set_header  X-Forwarded-Proto $scheme;
      proxy_read_timeout                  900;
    }
}

3. Die Portweiterleitung ist noch nicht abgeschlossen. Sie müssen zuerst einen symbolischen Link anhängen. Sie werden /etc/nginx/sites-available/your_domain_name verlinken Konfigurationsdatei nach /etc/nginx/sites-enabled/. Es folgt der vollständige Befehl:

cd /etc/nginx/sites-enabled/ && sudo ln -s /etc/nginx/sites-available/your_domain_name .

4. Starten Sie den NGINX-Dienst neu, nachdem Sie den symbolischen Link erstellt haben:

# Restarting Nginx service
sudo systemctl restart nginx 

Öffnen Sie den Browser auf Ihrem Client-Gerät und navigieren Sie zu https://your_domain_name/v2/ um auf v2 zuzugreifen endpoint, die Docker-HTTP-API.

Das Bild unten zeigt die erwartete Ausgabe des Host-Terminals nach dem Navigieren zum Link. Das Bild zeigt auch, dass der Browser ein GET gesendet hat Anfrage an die Docker-HTTP-API über v2 Endpunkt.

Nach dem Navigieren zu v2 Endpunkt über den Link, ein leeres JSON-Objekt – {} – wird im Browserfenster angezeigt.

Konfigurieren der NGINX-Datei-Upload-Größe

Die standardmäßige Upload-Größenbeschränkung von NGINX ist 1m , wobei m steht für Megabyte. Das Standardlimit reicht bei weitem nicht aus, um Docker-Images in Ihre Registrierung hochzuladen. Um diesen Wert zu ändern, bearbeiten Sie nginx.conf, daher akzeptiert NGINX das Hochladen großer Dateien.

1. Melden Sie sich erneut beim Hostcomputer an.

2. Bearbeiten Sie die /etc/nginx/nginx.conf Datei:

3. Unter dem http Abschnitt in nginx.conf Datei, fügen Sie die folgende Zeile hinzu, um die Upload-Größe auf 8.192 Megabyte zu erhöhen, und speichern Sie die Datei:

client_max_body_size 8192m;

Die Konfiguration sieht in etwa so aus:

SSL einrichten

Ein SSL-Zertifikat ist erforderlich, um die Verbindung zur Docker-Registry zu sichern. Um ein SSL-Zertifikat hinzuzufügen, müssen Sie Certbot auf dem Registrierungshost installieren.

Sie können Certbot mit dem Snap-Paketmanager installieren. Der Snap-Paketmanager ist in Ubuntu 20.04 bereits vorinstalliert.

1. Um Certbot zu installieren, führen Sie den folgenden Befehl auf Ihrem Hostcomputer aus:

# Install certbot using the snap package manager
sudo snap install --classic certbot

2. Fügen Sie Certbot zu PATH hinzu, damit Certbot-Befehle funktionieren können, indem Sie einen symbolischen Link erstellen:

# Attaching certbot to PATH
sudo ln -s /snap/bin/certbot /usr/bin/certbot

3. Führen Sie diesen Befehl aus, um ein Zertifikat zu erhalten und Certbot Ihre NGINX-Konfiguration automatisch bearbeiten zu lassen und auch den HTTPS-Zugriff für Ihre Domain zu aktivieren:

# Creating a certificate and enabling HTTPS access
sudo certbot --nginx

Certbot ändert den your_domain_name Konfigurationsdatei unter /etc/nginx/sites-enabled/ Verzeichnis und wenden Sie ein SSL-Zertifikat auf Ihren Domainnamen an.

Das Bild unten zeigt die endgültige Konfiguration für Ihren /etc/nginx/sites-enabled/your_domain_name Datei wird aussehen, nachdem Certbot die Zertifikate angewendet hat.

Wenn Sie zu https://your_domain_name/ navigieren , Sie werden feststellen, dass es mit dem Zertifikat von Certbot sicher ist.

Einrichten der HTTP-Authentifizierung für die Docker-Registrierung

Es ist immer eine gute Idee, gute Sicherheitspraktiken zu haben. So sichern Sie Ihre Docker-Registrierung und beschränken den Zugriff auf Sie und einige andere Benutzer, die Sie möglicherweise hinzufügen möchten. Sie verwenden die von HTTP Basic Auth bereitgestellte HTTP-Authentifizierung .

1. Die HTTP-Authentifizierung erfordert ein htpasswd Datei mit Ihrem Benutzernamen und Passwort. Um das htpasswd zu erstellen Authentifizierung müssen Sie die apache2-utils installieren Paket:

# Installing apache2-utils package
sudo apt-get install apache2-utils

2. Nach der Installation von apache2-utils Erstellen Sie eine registry.credentials Datei in /etc/nginx Verzeichnis mit dem httpasswd Befehl. Fügen Sie einen bevorzugten Benutzernamen hinzu, indem Sie your_username ersetzen im folgenden Befehl. Fügen Sie als Nächstes ein Passwort Ihrer Wahl hinzu, wenn Sie dazu aufgefordert werden. Der vollständige Befehl und seine Ausgabe sind unten aufgeführt.

# Creating to creating auth credentials
sudo htpasswd -c /etc/nginx/registry.credentials your_username

3. Nach dem Erstellen der registry.credentials navigieren Sie zu Ihrer NGINX-Konfigurationsdatei für Ihre Docker-Registrierung unter /etc/nginx/sites-available/your_domain_name . Fügen Sie den folgenden Text zur NGINX-Konfigurationsdatei im server hinzu Abschnitt:

server {
	...
	...
	location / {
			...
			auth_basic            "Basic Auth";
      auth_basic_user_file  "/etc/nginx/registry.credentials";
			...
	}
}

4. Starten Sie NGINX erneut und wenden Sie die Konfigurationen mit dem folgenden Befehl erneut an:

# Restarting nginx
sudo systemctl restart nginx

Das folgende Bild zeigt dies, wenn Sie versuchen, auf https://your_domain_name/ zuzugreifen In Ihrem Browser werden Sie aufgefordert, Ihren Benutzernamen und Ihr Passwort einzugeben. Für dieses Tutorial wird die Docker-Registrierung unter einer Subdomäne registry.joeshiett.xyz ausgeführt , mit aktiviertem SSL.

Bild in privates Docker-Repository übertragen

Jetzt, da Ihre Docker-Registrierung ausgeführt wird und größere Datei-Uploads akzeptieren kann, werden Sie ein Image darauf übertragen. Um ein Image per Push in Ihre Docker-Registrierung zu übertragen, müssen Sie auf Ihren Clientcomputer zugreifen.

Wenn Sie kein Docker-Image lokal auf Ihrem Clientcomputer gespeichert haben, können Sie ein kostenloses von Docker Hub abrufen.

1. Führen Sie den folgenden Befehl aus, um ein Alpine-Linux-Image aus dem Docker-Hub abzurufen, und legen Sie den Namen des Images als test-image fest , und führen Sie den Container in der interaktiven Shell aus:

# Pull and run Alpine container
sudo docker run --name test-image -it alpine:latest /bin/sh

2. Sobald Sie sich im Alpine-Container befinden, erstellen Sie eine Datei namens TEST . Diese Datei ist dann die Bestätigung, dass das Image, das Sie aus Ihrer Docker-Registrierung abrufen, dasjenige ist, das Sie gerade ändern:

# create a file called TEST
touch /TEST

3. Verlassen Sie die interaktive Shell, indem Sie exit eingeben auf Ihrem Endgerät.

4. Erstellen Sie nun ein Docker-Image aus dem Alpine-Docker-Container mit dem Namen test-image , Sie haben gerade angepasst:

# Creating Docker image
sudo docker commit test-image your_domain_name/test-image:latest

Das Alpine-Image, das Sie zuvor gezogen und angepasst haben, ist jetzt lokal mit einem Repository namens your_domain_name/test-image verfügbar und markieren Sie latest .

5. Um Ihr neu erstelltes Image per Push in Ihre Docker-Registrierung zu übertragen, melden Sie sich mit dem folgenden Befehl bei Ihrer Docker-Registrierung an:

# Login to Docker registry
sudo docker login https://your_domain_name 

Sie werden aufgefordert, Ihren Benutzernamen und Ihr Passwort einzugeben, die Sie im vorherigen Abschnitt eingerichtet haben. Die Ausgabe ist:

...
Login Succeeded
...

6. Pushen Sie nach der Anmeldung das markierte Image in Ihr Docker-Repository:# Pushing docker image sudo docker push your_domain_name/test-image:latest

# Pushing docker image
sudo docker push your_domain_name/test-image:latest

Die Ausgabe des Befehls sieht folgendermaßen aus:

Bild aus privatem Docker-Repository abrufen

Nachdem Sie Ihr Docker-Image nun erfolgreich in Ihr privates Docker-Repository übertragen haben, ist es an der Zeit, das soeben übertragene Image abzurufen.

1. Zunächst müssen Sie sich bei Ihrem privaten Docker-Repository anmelden:# Login to Docker registry sudo docker login https://your_domain_name

# Login to Docker registry
sudo docker login https://your_domain_name 

2. Nach der Anmeldung ziehen Sie das zuvor erstellte Docker-Image:

# Pull Docker image from Docker registry
sudo docker pull your_domain_name/test-image

Aus dem Bild unten können Sie sehen, dass Docker das test-image abruft erfolgreich.

3. Zeit zum Ausführen einer interaktiven Shell:

sudo docker run -it your_domain_name/test-image /bin/sh

4. Führen Sie in der interaktiven Shell den folgenden Befehl aus:

ls

Auf dem Bild unten können Sie sehen, dass der TEST Die zuvor erstellte Datei befindet sich im Container.

Jetzt haben Sie Ihre Docker-Registrierung erfolgreich getestet und können loslegen!

Schlussfolgerung

In diesem Tutorial haben Sie Ihre eigene private Docker-Registrierung erstellt. Sie haben die erforderlichen Voraussetzungen installiert; SSL- und HTTP-Authentifizierung einrichten. Und dann haben Sie endlich ein Image aus Ihrer Registrierung gepusht und gezogen.

Also, welche Pakete planen Sie in Ihre Registry zu pushen?


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

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

  3. So installieren Sie Docker unter Ubuntu 18.04 / Ubuntu 18.10 / Ubuntu 19.04

  4. So erstellen, listen und löschen Sie Docker-Container unter Linux

  5. Wie installiere ich Docker unter Ubuntu 18.04?

So erstellen Sie einen Sudo-Benutzer in Ubuntu Linux

So installieren Sie Docker CE unter Linux Mint 20

So installieren Sie Docker unter Ubuntu 20.04, 18.04, 21.04

So installieren Sie Docker unter Ubuntu 14.04

So installieren Sie Docker Compose auf Ubuntu

So installieren Sie Docker unter Ubuntu 18.04