Die Docker-Registrierung ist eine Anwendung, mit der Sie die Docker-Images intern (innerhalb Ihrer Organisation) speichern und verteilen können. Docker hat sogar eine öffentliche Registry namens Docker Hub, die kostenlos Docker-Images speichern kann.
Das Problem mit der öffentlichen Docker-Registrierung besteht jedoch darin, dass die Bilder, die Sie darauf hochladen, öffentlich werden. Das ist nicht das, was Sie oder Ihre Organisation erwarten, wenn Sie viele Stunden gearbeitet haben, um ein Image aufzubauen, und das an die Öffentlichkeit geht.
Um diese Hürde zu überwinden, können Sie privat eine Docker-Registrierung für Ihr Projekt einrichten, sodass nur Sie oder Ihre Organisation die Docker-Images darauf speichern und an Ihre Kollegen verteilen können.
Hier, in diesem technischen Leitfaden, besprechen wir, wie Docker Private Registry auf CentOS 7 eingerichtet wird / Ubuntu 16.04 / Fedora 26/25 .
Infrastruktur
Hostname | IP-Adresse | Betriebssystem | Zweck |
---|---|---|---|
registry.itzgeek.local | 192.168.12.10 | CentOS 7 | Fungiert als privater Docker-Registrierungsserver |
build.itzgeek.local | 192.168.12.20 | Ubuntu 16.04 | Fungiert als Docker-Engine-Knoten, an dem die Entwickler die Docker-Images entweder mit dockerfile oder docker compose erstellen und diese Images dann auf den obigen privaten Docker-Registrierungsserver hochladen. |
deploy.itzgeek.local | 192.168.12.30 | Fedora 26/25 | Fungiert als Docker-Engine-Knoten, wo wir Container bereitstellen, die von einem privaten Registrierungsserver heruntergeladen (Pull) werden. |
Voraussetzungen
Installieren Sie die Docker-Engine auf allen Ihren Knoten und stellen Sie sicher, dass der Docker-Dienst betriebsbereit ist.
LESEN :So installieren Sie Docker CE auf CentOS 7
LESEN :So installieren Sie Docker CE unter Ubuntu 16.04
LESEN :So installieren Sie Docker CE auf Fedora 26/25
Richten Sie die private Docker-Registrierung ein
Melden Sie sich beim Registrierungsknoten an und ziehen Sie das Registrierungs-Image von Docker Hub.
[root@registry ~]# docker pull registry
Wählen Sie, ob Sie mit der einfachen oder der gesicherten Docker-Registrierung arbeiten möchten.
Einfache Docker-Registrierung
[root@registry ~]# docker run -dit -p 5000:5000 --name registry registry
Sichere private Docker-Registrierung
Standardmäßig verwendet der Docker-Knoten eine sichere Verbindung über TLS, um Bilder in die oder aus der privaten Registrierung hoch- oder herunterzuladen. Sie können TLS-Zertifikate verwenden, die von der Zertifizierungsstelle signiert oder auf dem Registrierungsserver selbst signiert sind.
Hier werde ich ein selbstsigniertes Zertifikat zum Sichern der Docker-Registrierung verwenden. Lassen Sie uns mit dem folgenden Befehl ein selbstsigniertes Zertifikat erstellen.
[root@registry ~]# mkdir -p /certs [root@registry ~]# openssl req -newkey rsa:4096 -nodes -sha256 -keyout /certs/ca.key -x509 -days 365 -out /certs/ca.crt Generating a 4096 bit RSA private key ............................................++ .....................................................................................................++ writing new private key to '/certs/ca.key' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [XX]:IN State or Province Name (full name) []:TN Locality Name (eg, city) [Default City]:CHN Organization Name (eg, company) [Default Company Ltd]:ITzGeek Organizational Unit Name (eg, section) []:IT Common Name (eg, your name or your server's hostname) []:registry.itzgeek.local Email Address []:[email protected]
Ersetzen Sie „registry.itzgeek.local ” mit dem FQDN Ihres Registrierungsservers.
Generiertes Zertifikat „ca.crt“ müssen auf allen Ihren Build-/Deploy-Knoten platziert werden, um diesem Zertifikat zu vertrauen.
Docker-Registrierungscontainer mit Zertifikatinformationen starten.
[root@registry ~]# docker run -d -p 5000:5000 --restart=always --name registry -v /certs:/certs -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/ca.crt -e REGISTRY_HTTP_TLS_KEY=/certs/ca.key registry
Jetzt haben Sie einen Registry-Server-Container mit dem Namen „registry “ läuft auf „registry.itzgeek.local “.
[root@registry ~]# docker ps
Ausgabe:
BefehlCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 8641fbc895f5 registry "/entrypoint.sh /e..." 44 seconds ago Up 41 seconds 0.0.0.0:5000->5000/tcp registry
Firewall
Sie müssten die folgenden Ports in der Firewall öffnen, damit die Docker-Registrierung außerhalb des Netzwerks verfügbar ist (zu build.itzgeek.local /deploy.itzgeek.local )
Sie müssen den folgenden Befehl auf dem Docker-Registrierungsserver (registry.itzgeek.local) ausführen, abhängig von Ihrem Betriebssystem.
Wenn Ihre Docker-Registrierung auf CentOS 7 / Fedora 26/25 läuft,
[root@registry ~]# firewall-cmd --permanent --add-port=5000/tcp [root@registry ~]# firewall-cmd --reload
Wenn sich Ihre Docker-Registrierung auf Ubuntu 16.04 befindet,
root@registry:~# ufw status root@registry:~# ufw allow 5000/tcp root@registry:~# ufw reload ufw enable
Jetzt ist die Docker Registry bereit für die Verteilung von Docker-Images.
Erstellen Sie ein Docker-Image und laden Sie es auf einen privaten Registrierungsserver hoch
Melden Sie sich bei Ihrem Build-Docker-Engine-Knoten an, z. „build.itzgeek.local ”
Erstellen Sie ein Docker-Image
Lassen Sie uns ein Docker-Image (für einen benutzerdefinierten Docker-Container) erstellen, um es auf den privaten Registrierungsserver hochzuladen. Auf drei Arten können Sie Container-Images erstellen/erstellen.
1. Verpflichten
2. Dockerfile
3. Docker Compose.
Erstellen Sie Ihr Docker-Image und halten Sie es für den Upload bereit, indem Sie eine der oben aufgeführten Methoden befolgen.
LESEN :So erstellen Sie Docker-Images mit Docker Commit
LESEN :So erstellen Sie Docker-Images mit DockerFile
Ich habe ein Docker-Image mit dem Namen „mycentos:httpdv1.0“ erstellt “ auf „build.itzgeek.local “ und wir werden es jetzt auf den privaten Registrierungsserver hochladen.
root@build:~# docker images
Ausgabe:
Benennen Sie nun das Docker-Image in etwa um in registryserver:portnumber/image name:tag
.
Wenn der Bildname nicht mit dem angegebenen Format übereinstimmt, versucht der Push- oder Pull-Befehl von Docker, das Bild aus der öffentlichen Registrierung hoch- oder herunterzuladen, nicht aus der privaten Registrierung.
Um das Docker-Image umzubenennen, verwenden Sie docker tag
Befehl.
root@build:~# docker tag mycentos:httpdv1.0 registry.itzgeek.local:5000/mycentos:httpdv1.0
Suchen Sie erneut nach der Liste der Docker-Images.
Laden Sie ein Docker-Image hoch
Hängt vom Kommunikationsmodus ab (Sicher oder Unsicher ) von Docker Registry, befolgen Sie eine der folgenden Methoden.
Nicht sicher (einfache Http-Registrierung)
Bearbeiten/erstellen Sie die Datei „daemon.json “ in „/etc/docker/ ” Verzeichnis.
root@build:~# vi /etc/docker/daemon.json
Fügen Sie den folgenden Inhalt hinzu.
{ "insecure-registries" : ["registry.itzgeek.local:5000"] }
Sicher (selbstsigniert)
Kopieren Sie das Zertifikat „ca.crt “ vom Registrierungsserver „registry.itzgeek.local “ nach „/etc/docker/certs.d/registry.itzgeek.local:5000/ca.crt “ auf „build.itzgeek.local “.
root@build:~# mkdir -p /etc/docker/certs.d/registry.itzgeek.local:5000/ root@build:~# scp -pr [email protected]:/certs/ca.crt /etc/docker/certs.d/registry.itzgeek.local:5000/
In beiden Fällen müssten Sie den Docker-Engine-Dienst neu starten.
root@build:~# systemctl restart docker
Laden Sie das Docker-Image mit dem folgenden Befehl auf den privaten Registrierungsserver hoch.
root@build:~# docker push registry.itzgeek.local:5000/mycentos:httpdv1.0
Docker-Container-Image vom Private Registry-Server herunterladen und bereitstellen
Melden Sie sich bei Ihrem bereitgestellten Docker-Engine-Knoten an, z. „bereitstellen.itzgeek.local “.
Abhängig vom Kommunikationsmodus (sicher oder nicht sicher) der Docker-Registrierung, befolgen Sie eine der folgenden Methoden.
Nicht sicher (einfache Http-Registrierung)
Bearbeiten/erstellen Sie die Datei „daemon.json “ in „/etc/docker/ ” Verzeichnis.
[root@deploy ~]# vi /etc/docker/daemon.json
Fügen Sie den folgenden Inhalt hinzu.
{ "insecure-registries" : ["registry.itzgeek.local:5000"] }
Sicher (Selbstsigniert)
Kopieren Sie das Zertifikat „ca.crt “ vom Registrierungsserver „registry.itzgeek.local “ nach „/etc/docker/certs.d/registry.itzgeek.local:5000/ca.crt “ auf „deploy.itzgeek.local “.
[root@deploy ~]# mkdir -p /etc/docker/certs.d/registry.itzgeek.local:5000/ [root@deploy ~]# scp -pr [email protected]:/certs/ca.crt /etc/docker/certs.d/registry.itzgeek.local:5000/
In beiden Fällen müssten Sie den Docker-Engine-Dienst neu starten.
[root@deploy ~]# systemctl restart docker
Laden Sie das Docker-Image mit dem folgenden Befehl auf den privaten Registrierungsserver herunter.
[root@deploy ~]# docker pull registry.itzgeek.local:5000/mycentos:httpdv1.0
Überprüfen Sie nun die Liste der verfügbaren Images mit „Docker-Images ” Befehl
[root@deploy ~]# docker images
Ausgabe:
Jetzt ist das Docker-Image bereit für die Bereitstellung.
LESEN :So stellen Sie Docker-Container bereit – Befehlszeilenschnittstelle
Das ist alles.