Docker
Private / sichere Registrierung für API mit API v2
Suche…
Einführung
Eine private und sichere Dockerregistrierung anstelle eines Docker Hub. Grundlegende Dockerfähigkeiten sind erforderlich.
Parameter
Befehl | Erläuterung |
---|---|
sudo docker run -p 5000: 5000 | Starten Sie einen Docker-Container und binden Sie den Port 5000 vom Container an den Port 5000 der physischen Maschine. |
--name Registrierung | Containername (zur besseren Lesbarkeit von "docker ps"). |
-v 'pwd' / certs: / certs | Binden Sie CURRENT_DIR / certs des physischen Computers an / certs des Containers (wie ein "freigegebener Ordner"). |
-e REGISTRY_HTTP_TLS_CERTIFICATE = / certs / server.crt | Wir geben an, dass die Registry die Datei /certs/server.crt zum Starten verwenden soll. (Umgebungsvariable) |
-e REGISTRY_HTTP_TLS_KEY = / certs / server.key | Gleiches für den RSA-Schlüssel (server.key). |
-v / root / images: / var / lib / registry / | Wenn Sie alle Registrierungsabbilder speichern möchten, sollten Sie dies auf dem physischen Computer tun. Hier speichern wir alle Bilder in / root / images auf dem physischen Computer. Wenn Sie dies tun, können Sie die Registrierung anhalten und erneut starten, ohne Bilder zu verlieren. |
Registrierung: 2 | Wir geben an, dass wir das Registrierungsabbild vom Docker-Hub (oder lokal) ziehen möchten, und fügen "2" hinzu, weil wir die Version 2 der Registrierung installieren möchten. |
Bemerkungen
Zertifikate generieren
Generieren Sie einen privaten RSA-Schlüssel: openssl genrsa -des3 -out server.key 4096
Openssl sollte in diesem Schritt nach einer Passphrase fragen. Beachten Sie, dass wir nur das Zertifikat für die Kommunikation und Authentifizierung ohne Passphrase verwenden. Verwenden Sie einfach 123456.
Generieren Sie die Zertifikatsignierungsanforderung: openssl req -new -key server.key -out server.csr
Dieser Schritt ist wichtig, da Sie nach Informationen zu Zertifikaten gefragt werden. Die wichtigsten Informationen sind "Common Name", dh der Domänenname, der für die Kommunikation zwischen der privaten Docker-Registrierung und allen anderen Computern verwendet wird. Beispiel: mydomain.com
Entfernen cp server.key server.key.org && openssl rsa -in server.key.org -out server.key
aus dem privaten RSA-Schlüssel: cp server.key server.key.org && openssl rsa -in server.key.org -out server.key
Wie gesagt, konzentrieren wir uns auf das Zertifikat ohne Passphrase. Seien Sie also vorsichtig mit allen Schlüsseldateien (.key, .csr, .crt) und bewahren Sie sie an einem sicheren Ort auf.
Generieren Sie das selbstsignierte Zertifikat: openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
Sie haben jetzt zwei wichtige Dateien, server.key und server.crt , die für die private Registrierungsauthentifizierung erforderlich sind.
Führen Sie die Registrierung mit einem selbstsignierten Zertifikat aus
Um die private Registry (sicher) auszuführen, müssen Sie ein selbstsigniertes Zertifikat erstellen. Sie können sich auf das vorherige Beispiel beziehen, um es zu generieren.
Für mein Beispiel habe ich server.key und server.crt in / root / certs eingefügt
Vor dem Lauf Docker Befehl sollten Sie platziert (verwenden werden cd
) in das Verzeichnis , das certs - Ordner enthält. Wenn dies nicht der Fall ist und Sie versuchen, den Befehl auszuführen, erhalten Sie eine Fehlermeldung wie
level = fatal msg = "/certs/server.crt öffnen: keine solche Datei oder Verzeichnis"
Wenn Sie ( cd /root
in meinem Beispiel) sind, können Sie die sichere / private Registrierung grundsätzlich mit folgendem sudo docker run -p 5000:5000 --restart=always --name registry -v `pwd`/certs:/certs -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/server.crt -e REGISTRY_HTTP_TLS_KEY=/certs/server.key -v /root/Documents:/var/lib/registry/ registry:2
starten: sudo docker run -p 5000:5000 --restart=always --name registry -v `pwd`/certs:/certs -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/server.crt -e REGISTRY_HTTP_TLS_KEY=/certs/server.key -v /root/Documents:/var/lib/registry/ registry:2
Erläuterungen zum Befehl finden Sie im Parameter-Teil.
Ziehen oder drücken Sie einen Docker-Client
Wenn Sie eine funktionierende Registry ausführen, können Sie Bilder darauf laden oder verschieben. Dazu benötigen Sie die server.crt -Datei in einem speziellen Ordner auf Ihrem Docker-Client. Mit dem Zertifikat können Sie sich bei der Registrierung authentifizieren und anschließend die Kommunikation verschlüsseln.
Kopieren Sie server.crt von der Registrierungsmaschine in die Datei /etc/docker/certs.d/mydomain.com:5000/ auf Ihrer Clientmaschine. mv /etc/docker/certs.d/mydomain.com:5000/server.crt /etc/docker/certs.d/mydomain.com:5000/ca-certificates.crt
dann in ca-certificate.crt um : mv /etc/docker/certs.d/mydomain.com:5000/server.crt /etc/docker/certs.d/mydomain.com:5000/ca-certificates.crt
An dieser Stelle können Sie Bilder aus Ihrer privaten Registry ziehen oder verschieben:
PULL: docker pull mydomain.com:5000/nginx
oder
DRÜCKEN :
- Holen Sie sich ein offizielles Image von hub.docker.com: docker
docker pull nginx
-
docker tag IMAGE_ID mydomain.com:5000/nginx
dieses Bild, bevor Sie es in die private Registry verschieben:docker tag IMAGE_ID mydomain.com:5000/nginx
(verwenden Siedocker images
, um die IMAGE_ID zu erhalten) - Schieben Sie das Bild in die Registry:
docker push mydomain.com:5000/nginx