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

JavaScript-Implementierung des Spiels des Lebens

Inhaltsverzeichnis Konzept-Einführung Logische Re...

So verwenden Sie den CocosCreator-Objektpool

Inhaltsverzeichnis Vorwort: Spezifische Operation...

Detaillierte Erklärung des Parameters slave_exec_mode in MySQL

Heute habe ich zufällig den Parameter slave_exec_...

Funktionen in TypeScript

Inhaltsverzeichnis 1. Funktionsdefinition 1.1 Fun...

So installieren Sie Nginx an einem bestimmten Ort im Centos-System

Wie installiere ich Nginx an einem bestimmten Ort...

So installieren und verwenden Sie Ubuntu Docker

Inhaltsverzeichnis 1. Automatische Installation m...

In einem Artikel erfahren Sie, wie Sie mit js den Sperrfeuereffekt erzielen

Inhaltsverzeichnis Erstellen Sie eine neue HTML-D...

Detaillierte Erklärung der Slots in Vue

Die Wiederverwendung von Code in Vue liefert uns ...

Schritte zum Bereitstellen eines Docker-Projekts in IDEA

Mittlerweile werden die meisten Projekte auf Dock...

So überwachen Sie Array-Änderungen in JavaScript

Vorwort Als ich zuvor „defineProperty“ vorgestell...

Grundlegende Ideen zum Auffinden von Fehlern in der Web-Frontend-Entwicklung

Die WEB-Entwicklung besteht hauptsächlich aus zwe...

Win10 Installation von MySQL 5.7 MSI-Version des Tutorials mit Bildern und Text

Ich habe es im MSI-Format installiert, hauptsächl...

Starten Sie alle gestoppten Docker-Container mit einem Befehl neu

Starten Sie alle gestoppten Docker-Container mit ...