Detailliertes Tutorial zur Installation von Harbor Private Warehouse mit Docker Compose

Detailliertes Tutorial zur Installation von Harbor Private Warehouse mit Docker Compose

Überblick

Was ist Hafen? Das englische Wort bedeutet: Hafen. Der Hafen wird zum Speichern von Containern (Fracht) verwendet, und der Ursprung von Docker basiert auf dem Prinzip der Container, sodass der Hafen zum Speichern von Docker-Images und als Image-Warehouse verwendet wird. Die offizielle Erklärung lautet: Harbor ist ein Registry-Server auf Unternehmensebene zum Speichern und Verteilen von Docker-Images.

Das Harbor Image Warehouse ist ein von VMware als Open Source bereitgestelltes Image Warehouse auf Unternehmensebene. Es umfasst zahlreiche Funktionen wie Berechtigungsverwaltung (RBAC), LDAP, Protokollprüfung, Verwaltungsschnittstelle, Selbstregistrierung, Image-Replikation usw.

1. Hafenmerkmale

1. Rollenbasierte Zugriffskontrolle: Benutzer und Repositories werden nach „Projekten“ organisiert und Benutzer können unterschiedliche Berechtigungen für mehrere Image-Repositories im selben Namespace haben.
2. Spiegelreplikation: Sie können Bilder und Diagramme zwischen mehreren Registry-Instanzen replizieren (synchronisieren). Wenn Fehler auftreten, versucht Harbor automatisch erneut, die Replikation zu starten. Ideal für Lastausgleich, Hochverfügbarkeit, mehrere Rechenzentren, Hybrid- und Multi-Cloud-Szenarien.
LDAP/AD-Unterstützung: Harbor lässt sich zur Benutzerauthentifizierung und -verwaltung in vorhandenes LDAP/AD des Unternehmens integrieren und unterstützt den Import von LDAP-Gruppen in Harbor sowie die Zuweisung entsprechender Projektrollen zu ihnen.
Löschen von Bildern und Speicherbereinigung: Bilder können gelöscht und ihr Speicherplatz wiederhergestellt werden.
4. Internationalisierung: Unterstützung für mehrere Sprachen (gibt es bereits Chinesisch, Englisch, Deutsch, Japanisch und Russisch);
5. Grafische Benutzeroberfläche: Benutzer können problemlos stöbern, Repositories durchsuchen und Projekte verwalten.
6. Audit-Management: Verfolgen Sie alle Vorgänge im Repository.
7. RESTful API: RESTful API für die meisten Verwaltungsvorgänge, einfache Integration in externe Systeme. Zum Erkunden und Testen der API steht eine eingebettete Swagger-Benutzeroberfläche zur Verfügung.
Einfache Bereitstellung: Es stehen Online- und Offline-Installationsprogramme zur Verfügung. Darüber hinaus kann es als virtuelle Appliance auf der vSphere-Plattform (OVA-Format) installiert werden.

2. Hafenkomponenten

1. Proxy: Die Komponenten von Harbor, wie etwa die Registrierung, die Benutzeroberfläche und der Token-Dienst, befinden sich alle hinter einem Reverse-Proxy. Der Proxy leitet Anfragen von Browsern und Docker-Clients an verschiedene Backend-Dienste weiter.
2. Registrierung: verantwortlich für das Speichern von Docker-Images und die Verarbeitung von Docker-Push/Pull-Befehlen. Da Harbor die Zugriffsberechtigungen für Bilder kontrollieren muss, weist das Register den Client an, auf den Token-Dienst zuzugreifen, um für jede Pull- oder Push-Anforderung ein gültiges Token zu erhalten.
3. Kerndienst: Die Kernfunktionen von Harbor umfassen hauptsächlich die Bereitstellung der folgenden Dienste:
1) Benutzeroberfläche: Bietet eine grafische Benutzeroberfläche, die Benutzern bei der Verwaltung von Bildern und Autorisierung von Benutzern hilft.
2) Webhook: Um die Statusänderungen von Bildern im Register rechtzeitig abzurufen, konfigurieren Sie den Webhook im Register, um die Statusänderungen an das UI-Modul weiterzuleiten.
3) Token-Dienst: verantwortlich für die Ausgabe von Token für jeden Docker-Push/Pull-Befehl basierend auf der Rolle des Benutzers im Projekt. Wenn die vom Docker-Client gesendete Anforderung kein Token enthält, leitet die Registrierung die Anforderung an den Token-Dienst weiter.
4. Datenbank: Bietet Datenbankdienste für Kerndienste und ist für die Speicherung von Benutzerberechtigungen, Prüfprotokollen, Docker-Image-Gruppierungsinformationen und anderen Daten verantwortlich.
5. Job Services: Bietet eine Remote-Image-Management-Funktion und kann lokale Images mit anderen Harbor-Instanzen synchronisieren.
6. Protokollsammler: Um den Betrieb von Harbor zu überwachen, ist er für die Protokolle anderer Komponenten des Mobiltelefons zur späteren Analyse verantwortlich.

Bildbeschreibung hier einfügen

3. Bereitstellungsumgebung

centos-7.6 192.168.8.130
Docker-Version 1.19.3
Docker-Compose Version 1.24.2
Harbor-Offline-Installer-v1.8.6.tgz

4. Installieren Sie Docker-Compose

Methode 1:
[root@centos130 ~]# curl -L https://github.com/docker/compose/releases/download/1.24.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
[root@centos130 ~]# chmod +x /usr/local/bin/docker-compose
Methode 2:
[root@centos130 ~]# wget https://bootstrap.pypa.io/get-pip.py
[root@centos130 ~]# python get-pip.py
[root@centos130 ~]# pip install docker-compose

5. Deinstallieren Sie Docker-Compose

#Binär:
[root@centos130 ~]rm /usr/local/bin/docker-compose
#Pip:
[root@centos130 ~]pip deinstallieren Docker-Compose

6. Docker installieren

[root@centos130 ~]# yum install -y yum-utils device-mapper-persistent-data lvm2
Fügen Sie eine stabile Quelle hinzu [root@centos130 ~]# yum-config-manager --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
[root@centos130 ~]# yum makecache fast
Installieren Sie die neueste stabile Version von docker-ce
[root@centos130 ~]# yum install -y docker-ce docker-ce-cli containerd.io vim
[root@centos130 ~]# mkdir /etc/docker && vim /etc/docker/daemon.json
{
  "Registrierungsspiegel": ["https://yxrgrke0.mirror.aliyuncs.com"],
  "unsichere Registrierungen": ["192.168.8.130:5000"],
  "unsichere Registrierungen": ["centos130:80"],
  "log-driver": "JSON-Datei",
  "log-opts": {
    "max-size": "100m",
    "max-Datei": "3"
    }
}
Starten Sie Docker
[root@centos130 ~]# systemctl daemon-reload
[root@centos130 ~]# systemctl aktiviere Docker && systemctl starte Docker
[root@centos130 ~]# systemctl status docker

7. Installieren Sie den Hafen

Hafen-Download-Adresse:
Harbor-GitHub-Adresse https://github.com/goharbor/harbor
http://harbor.orientsoft.cn/
[root@centos130 ~]# wget https://storage.googleapis.com/harbor-releases/release-1.8.6/harbor-offline-installer-v1.8.6.tgz
[root@centos130 ~]# tar -xf harbor-offline-installer-v1.8.6.tgz -C /usr/local/
[root@centos130 ~]# cd /usr/local/harbour/
[root@centos130 ~]# vim harbor.yml
Hostname = centos130
#Dies ist nur ein einfacher Test. Bearbeiten Sie daher nur diese Zeile und lassen Sie die anderen standardmäßig unverändert. #Benutzerregistrierung deaktivieren self_registration = off
#Legen Sie fest, dass nur Administratoren Projekte erstellen können project_creation_restriction = adminonly

8. Führen Sie das Installationsskript aus

[root@centos130 ~]# ./instsll.sh  
Beschreibung: Installationsfehler: Docker-Proxy, Docker-Runc können nicht gefunden werden
Führen Sie [root@centos130 ~]# ln -s /usr/libexec/docker/docker-runc-current /usr/bin/docker-runc aus.
[root@centos130 ~]# ln -s /usr/libexec/docker/docker-proxy-current /usr/bin/docker-proxy
Zeigen Sie die gestartete Image-Datei an [root@centos130 ~]# docker-compose ps
Stopp und Start von Hafencontainern:
[root@centos130 ~]# cd /usr/local/harbour/
[root@centos130 ~]# Docker-Compose-Stopp
[root@centos130 ~]# docker-compose starten

9. Melden Sie sich bei Harbor an

Die Installation ist nun abgeschlossen. Öffnen Sie den Browser, melden Sie sich direkt an und erstellen Sie mein Projekt:
Das Standard-Benutzerkennwort lautet: admin/Harbor12345

Bildbeschreibung hier einfügen

Melden Sie sich über das Shell-Befehlszeilenterminal beim Harbor-Repository an.

[root@centos130 ~]# Harbor-Image hochladen [root@centos130 ~]# Docker-Login centos130:80
[root@centos130 ~]# docker login -u admin -p Harbor12345 centos130:80 #Konto und Passwort: admin/Harbor12345
Benutzername: admin
Passwort: 
Anmeldung erfolgreich

Testen Sie den Bild-Upload

[root@centos130 ~]# Docker zieht nginx
[root@centos130 ~]# Docker-Tag nginx:latest centos130:80/my/nginx:latest
[root@centos130 ~]# Docker-Bilder
[root@centos130 ~]# docker push centos130:80/my/nginx:latest
Der Push bezieht sich auf das Repository [centos130:80/my/nginx]
55a77731ed26: Geschoben 
71f2244bc14d: Geschoben 
f2cb0ecef392: Geschoben 
zuletzt: Digest: sha256:3936fb3946790d711a68c58be93628e43cbca72439079e16d154b5db216b58da Größe: 948

Hinweis: Das Format ist: Benutzer-IP/Projektname/Bildname:Versionsnummer (der Projektname muss vorab in der Web-Benutzeroberfläche erstellt werden).
[root@centos130 ~]# Docker-Bilder
REPOSITORY TAG BILD ID ERSTELLT GRÖSSE
centos130:80/my/nginx:latest latest 5a3221f0137b vor 5 Tagen 126MB
nginx latest 5a3221f0137b vor 5 Tagen 126 MB
Löschen Sie das lokale Nginx-Image und testen Sie den Download [root@centos130 ~]# docker pull centos130:80/my/nginx:latest

10. Harbor ändert die Portnummer

1. Ändern Sie die Zuordnung der Datei docker-compose.yml zu Port 1180:

Ändern Sie die Konfigurationsdatei [root@centos130 ~]# cat /usr/local/harbor/docker-compose.yml

Version: '2.3'
Leistungen:
  Protokoll:
    Bild: goharbor/harbor-log:v1.8.6
    Containername: Hafenprotokoll
    Neustart: immer
    dns_search: .
    Kappe_Tropfen:
      - ALLE
    cap_add:
      -CHOWN
      -DAC_OVERRIDE
      -SETGID
      -SETUID
    Bände:
      – /var/log/hafen/:/var/log/docker/:z
      - ./common/config/log/:/etc/logrotate.d/:z
    Häfen:
      127.0.0.1:1514:10514
    Netzwerke:
      -Hafen
  Registrierung:
    Bild: goharbor/registry-photon:v2.7.1-patch-2819-v1.8.6
    Containername: Registrierung
    Neustart: immer
    Kappe_Tropfen:
      - ALLE
    Cap_Add: (Hinzufügen)
      -CHOWN
      -SETGID
      -SETUID
    Bände:
      – /data/registry:/storage:z
      - ./common/config/registry/:/etc/registry/:z
      - Typ: binden
        Quelle: /data/secret/registry/root.crt
        Ziel: /etc/registry/root.crt
    Netzwerke:
      -Hafen
    dns_suche: .
    hängt ab von:
      -Protokoll
    Protokollierung:
      Treiber: "syslog"
      Optionen:  
        Syslog-Adresse: "tcp://127.0.0.1:1514"
        Schlagwort: "Registrierung"
  Registrierungsnummer:
    Bild: goharbor/harbor-registryctl:v1.8.6
    Containername: Registryctl
    Umgebungsdatei:
      - ./common/config/registryctl/env
    Neustart: immer
    Kappe_Tropfen:
      - ALLE
    Cap_Add: (Hinzufügen)
      -CHOWN
      -SETGID
      -SETUID
    Bände:
      – /data/registry:/storage:z
      - ./common/config/registry/:/etc/registry/:z
      - Typ: binden
        Quelle: ./common/config/registryctl/config.yml
        Ziel: /etc/registryctl/config.yml
    Netzwerke:
      -Hafen
    dns_suche: .
    hängt ab von:
      -Protokoll
    Protokollierung:
      Treiber: "syslog"
      Optionen:  
        Syslog-Adresse: "tcp://127.0.0.1:1514"
        tag: "registryctl"
  postgresql:
    Bild: goharbor/harbor-db:v1.8.6
    Containername: Harbor-DB
    Neustart: immer
    Kappe_Tropfen:
      - ALLE
    Cap_Add: (Hinzufügen)
      -CHOWN
      -DAC_OVERRIDE
      -SETGID
      -SETUID
    Bände:
      – /data/database:/var/lib/postgresql/data:z
    Netzwerke:
      Hafen:
    dns_suche: .
    Umgebungsdatei:
      - ./common/config/db/env
    hängt ab von:
      -Protokoll
    Protokollierung:
      Treiber: "syslog"
      Optionen:  
        Syslog-Adresse: "tcp://127.0.0.1:1514"
        Schlagwort: "postgresql"
  Kern:
    Bild: goharbor/harbor-core:v1.8.6
    Containername: Harbor-Core
    Umgebungsdatei:
      - ./common/config/core/env
    Neustart: immer
    Kappe_Tropfen:
      - ALLE
    Cap_Add: (Hinzufügen)
      -SETGID
      -SETUID
    Bände:
      – /data/ca_download/:/etc/core/ca/:z
      - /data/psc/:/etc/core/token/:z
      – /data/:/data/:z
      - ./common/config/core/certificates/:/etc/core/certificates/:z
      - Typ: binden
        Quelle: ./common/config/core/app.conf
        Ziel: /etc/core/app.conf
      - Typ: binden
        Quelle: /data/secret/core/private_key.pem
        Ziel: /etc/core/private_key.pem
      - Typ: binden
        Quelle: /data/secret/keys/secretkey
        Ziel: /etc/core/key
    Netzwerke:
      Hafen:
    dns_suche: .
    hängt ab von:
      -Protokoll
      - Registrierung
    Protokollierung:
      Treiber: "syslog"
      Optionen:  
        Syslog-Adresse: "tcp://127.0.0.1:1514"
        Schlagwort: "Kern"
  Portal:
    Bild: goharbor/harbor-portal:v1.8.6
    Containername: Hafenportal
    Neustart: immer
    Kappe_Tropfen:
      - ALLE
    Cap_Add: (Hinzufügen)
      -CHOWN
      -SETGID
      -SETUID
      -NET_BIND_SERVICE
    Netzwerke:
      -Hafen
    dns_suche: .
    hängt ab von:
      -Protokoll
      -Kern
    Protokollierung:
      Treiber: "syslog"
      Optionen:
        Syslog-Adresse: "tcp://127.0.0.1:1514"
        Schlagwort: "Portal"

  Jobservice:
    Bild: goharbor/harbor-jobservice:v1.8.6
    Containername: Hafen-Jobservice
    Umgebungsdatei:
      - ./common/config/jobservice/env
    Neustart: immer
    Kappe_Tropfen:
      - ALLE
    Cap_Add: (Hinzufügen)
      -CHOWN
      -SETGID
      -SETUID
    Bände:
      - /data/job_logs:/var/log/jobs:z
      - Typ: binden
        Quelle: ./common/config/jobservice/config.yml
        Ziel: /etc/jobservice/config.yml
    Netzwerke:
      -Hafen
    dns_suche: .
    hängt ab von:
      - Redis
      -Kern
    Protokollierung:
      Treiber: "syslog"
      Optionen:
        Syslog-Adresse: "tcp://127.0.0.1:1514"
        Schlagwort: "Jobservice"
  Redis:
    Bild: goharbor/redis-photon:v1.8.6
    Containername: Redis
    Neustart: immer
    Kappe_Tropfen:
      - ALLE
    Cap_Add: (Hinzufügen)
      -CHOWN
      -SETGID
      -SETUID
    Bände:
      – /data/redis:/var/lib/redis
    Netzwerke:
      Hafen:
    dns_suche: .
    hängt ab von:
      -Protokoll
    Protokollierung:
      Treiber: "syslog"
      Optionen:
        Syslog-Adresse: "tcp://127.0.0.1:1514"
        Schlagwort: "redis"
  Proxy:
    Bild: goharbor/nginx-photon:v1.8.6
    Containername: nginx
    Neustart: immer
    Kappe_Tropfen:
      - ALLE
    Cap_Add: (Hinzufügen)
      -CHOWN
      -SETGID
      -SETUID
      -NET_BIND_SERVICE
    Bände:
      - ./common/config/nginx:/etc/nginx:z
    Netzwerke:
      -Hafen
    dns_suche: .
    Häfen:
      1180:80
      -443:443
      -4443:4443
    hängt ab von:
      - PostgreSQL
      - Registrierung
      -Kern
      - Portal
      -Protokoll
    Protokollierung:
      Treiber: "syslog"
      Optionen:  
        Syslog-Adresse: "tcp://127.0.0.1:1514"
        Schlagwort: "Proxy"
Netzwerke:
  Hafen:
    extern: false

2. Ändern Sie die Datei /etc/docker/daemon.json und ändern Sie Port 80 in Port 1180:

Daemon-Konfiguration ändern [root@centos130 ~]# cat /etc/docker/daemon.json 

{
  "Registrierungsspiegel": ["https://yxrgrke0.mirror.aliyuncs.com"],
  "unsichere Registrierungen": ["192.168.8.130:5000"],
  "unsichere Registrierungen": ["centos130:1180"],
  "log-driver": "JSON-Datei",
  "log-opts": {
    "max-size": "100m",
    "max-Datei": "3"
    }
}

3. Ändern Sie den Hostnamen der Datei /usr/locat/harbor/harbor.yml

Ändern Sie die Hostnamenkonfiguration cat /usr/locat/harbor/harbor.yml
Hostname: centos130:1180

4. Stoppen Sie den Hafen, starten Sie neu und generieren Sie Konfigurationsdateien

Neu initialisieren [root@centos130 ~]# cd /usr/locat/harbor/
[root@centos130 ~]# Docker-Compose-Stopp
[root@centos130 ~]# ./install.sh

5. Docker neu starten

[root@centos130 ~]# systemctl daemon-reload
[root@centos130 ~]# systemctl restart docker.service
Überprüfen Sie [root@centos130 ~]# docker login centos130:1180
Benutzername: admin
Passwort: Harbor12345

Dies ist das Ende dieses Artikels über die Installation von Harbor mit Docker-Compose. Weitere Informationen zur Installation von Harbor mit Docker-Compose finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Detaillierte Erklärung zum Erstellen eines privaten Docker-Image-Repositorys basierend auf Harbor
  • Docker erstellt ein privates Lager (Registrierung, Hafen)
  • Architektur und Komponentenbeschreibung der privaten Docker-Bibliothek Harbor
  • Detaillierte Schritte zur Installation von Harbor, einem privaten Docker-Repository
  • Implementierung von Docker zum Aufbau eines privaten Warehouse (Registrierung und Harbor)
  • Beispiel zum Erstellen eines öffentlichen Harbor-Repository mit Docker
  • Bauprozess eines privaten Docker-Lagerhafens
  • Schritte für Docker zum Erstellen eines privaten Lagerhafens
  • Docker Gitlab+Jenkins+Harbor erstellt einen persistenten Plattformbetrieb
  • Detailliertes Tutorial zum Erstellen einer Continuous-Integration-Delivery-Umgebung basierend auf Docker+K8S+GitLab/SVN+Jenkins+Harbor
  • So erstellen Sie mit Harbor ein privates Docker-Repository
  • Docker5 - Vollfunktionaler Hafenlager-Bauprozess
  • Jenkins erstellt Docker-Images und überträgt sie in das Harbor-Warehouse.
  • Methode zum Erstellen eines privaten Docker-Warehouses basierend auf Harbor
  • Einführung und Bereitstellungsmethode des Docker Private Warehouse Harbor

<<:  So entwerfen Sie MySQL-Statistikdatentabellen

>>:  CSS3 realisiert Textreliefeffekt, Gravureffekt, Flammentext

Artikel empfehlen

Zusammenfassung der Web-Frontend-Kenntnisse (persönliche praktische Erfahrung)

1. Als ich heute eine Seite erstellte, stieß ich a...

Webdatenspeicherung: Cookie, UserData, SessionStorage, WebSqlDatabase

Plätzchen Dies ist eine Standardmethode zum Speic...

Was Sie über MySQL-Sperren wissen müssen

1. Einleitung MySQL-Sperren können je nach Umfang...

CentOS8 - bash: verstümmelte Zeichen und Lösungen

Diese Situation tritt normalerweise auf, weil das...

uniapp implementiert Datums- und Zeitauswahl

In diesem Artikelbeispiel wird der spezifische Co...

Axios storniert Anfragen und vermeidet doppelte Anfragen

Inhaltsverzeichnis Herkunft Status Quo Anfrage ab...

So definieren Sie Eingabetyp=Dateistil

Warum die Dateisteuerung verschönern? Stellen Sie ...

So erhalten Sie USB-Scannerdaten mit js

In diesem Artikel wird der spezifische Prozess zu...

Detaillierte Installation und Verwendung von SSH in der Ubuntu-Umgebung

SSH steht für Secure Shell, ein sicheres Übertrag...