Menu
Szybki wybór
Hosting Domeny VPS SSL Kalkulator Porównania FAQ
Aktywne kody
Wszystkie kody rabatowe

Harbor — prywatny rejestr Docker z skanowaniem obrazów

Opublikowano: 10 kwietnia 2026 · Kategoria: VPS i serwery

Przechowywanie obrazów Docker na Docker Hub wiąże się z limitami pull rate, brakiem gwarancji prywatności i ryzykiem zależności od zewnętrznego serwisu. Harbor to CNCF Graduated prywatny rejestr kontenerów, który stawiasz na własnym VPS. Oferuje nieograniczone prywatne repozytoria, wbudowane skanowanie podatności (Trivy), kontrolę dostępu RBAC, replikację między rejestrami i wsparcie Helm chartów. Ten artykuł przeprowadza przez instalację, konfigurację projektów, robot accounts i integrację z Kubernetes.

Instalacja Harbor przez Docker Compose

Harbor dystrybuuje offline installer — spakowany archiwum zawierający wszystkie obrazy Docker i skrypt instalacyjny. Nie potrzebujesz dostępu do Docker Hub podczas instalacji.

# Pobierz offline installer (sprawdz aktualna wersje na github.com/goharbor/harbor)
wget https://github.com/goharbor/harbor/releases/download/v2.12.0/harbor-offline-installer-v2.12.0.tgz
tar xvf harbor-offline-installer-v2.12.0.tgz
cd harbor

# Konfiguracja
cp harbor.yml.tmpl harbor.yml
nano harbor.yml

# Kluczowe ustawienia w harbor.yml:
# hostname: harbor.example.com
# http:
#   port: 80
# https:
#   port: 443
#   certificate: /etc/harbor/tls/harbor.crt
#   private_key: /etc/harbor/tls/harbor.key
# harbor_admin_password: zmien-to-haslo
# database:
#   password: mocne-haslo-db

# Wygeneruj certyfikat (lub uzyj Let's Encrypt)
mkdir -p /etc/harbor/tls
openssl genrsa -out /etc/harbor/tls/ca.key 4096
openssl req -x509 -new -nodes -sha512 -days 3650 \
  -subj "/C=PL/ST=Mazovia/L=Warsaw/O=MyOrg/CN=harbor.example.com" \
  -key /etc/harbor/tls/ca.key \
  -out /etc/harbor/tls/ca.crt
# (dla produkcji: certbot z Let's Encrypt lub własne CA)

# Instalacja
sudo ./install.sh --with-trivy

# Harbor uruchamia sie przez docker compose w katalogu /harbor

Projekty, użytkownicy i robot accounts

Harbor organizuje obrazy w projekty — odpowiedniki organizacji na Docker Hub. Każdy projekt ma własnych użytkowników z rolami (Guest, Developer, Maintainer, ProjectAdmin) i ustawienia bezpieczeństwa.

# Zaloguj sie do Harbor przez CLI
docker login harbor.example.com
# Username: admin
# Password: (harbor_admin_password)

# Push obrazu
docker tag myapp:latest harbor.example.com/myproject/myapp:latest
docker push harbor.example.com/myproject/myapp:latest

# Pull obrazu
docker pull harbor.example.com/myproject/myapp:latest

# Robot accounts przez Harbor API (lub UI: Admin → Robot Accounts)
# Uzyj robot w CI/CD zamiast hasla admina

# Konfiguracja Docker demona dla self-signed cert (na kliencie Docker)
# /etc/docker/daemon.json
{
  "insecure-registries": ["harbor.example.com"]
}
# LUB skopiuj CA cert:
sudo mkdir -p /etc/docker/certs.d/harbor.example.com
sudo cp /etc/harbor/tls/ca.crt /etc/docker/certs.d/harbor.example.com/ca.crt
sudo systemctl restart docker

Skanowanie podatności Trivy

Harbor z --with-trivy automatycznie skanuje każdy push nowego obrazu. Trivy sprawdza warstwy obrazu pod kątem CVE w bazach NVD, GitHub Security Advisories, Red Hat, Debian i innych. Możesz ustawić Prevent vulnerable images from running — Harbor zablokuje pull obrazów z podatnościami powyżej ustalonego severity.

  • Scan on push: automatyczny skan po każdym docker push — wyniki widoczne w UI projektu w ciągu kilkudziesięciu sekund.
  • Scheduled scans: codzienne skanowanie istniejących obrazów (bazy CVE są aktualizowane, stary obraz może stać się podatny).
  • Vulnerability threshold: Project → Configuration → Prevent vulnerable images — blokuje pull obrazów z CVE o severity HIGH lub CRITICAL.
  • Trivy DB update: Harbor pobiera bazę CVE automatycznie; możesz wymusić aktualizację przez UI: Administration → Interrogation Services → Update.

Replikacja między rejestrami

Harbor obsługuje replikację push i pull między wieloma rejestrami: Harbor, Docker Hub, ECR (AWS), GCR (Google), ACR (Azure) i Quay. Przydatne do geo-replikacji (registry w PL i w DE) lub tworzenia lustrzanej kopii Docker Hub dla szybszych pullów.

# Konfiguracja replikacji przez Harbor API
# 1. Dodaj zdalny rejestr (target):
#    Administration → Registries → New Endpoint
#    Typ: Harbor / Docker Hub / AWS ECR etc.
#    URL, user/token drugiego rejestru

# 2. Utworz regule replikacji:
#    Administration → Replications → New Replication Rule
#    Mode: Push-based (push do remote po lokalnym push)
#    Source: myproject/**        (filter - wszystkie obrazy z projektu)
#    Destination: myproject/     (katalog docelowy)
#    Trigger: Event-based (na kazdy push) lub Schedule

# Przykladowy workflow: lokalny Harbor → kopia na Docker Hub
# Kazdy push do harbor.example.com/myproject/myapp
# automatycznie replikuje do docker.io/myorg/myapp

Integracja z Kubernetes (imagePullSecret)

# Stworz Secret z credentials Harbor (robot account)
kubectl create secret docker-registry harbor-registry \
  --docker-server=harbor.example.com \
  --docker-username=robot\$myproject+ci-robot \
  --docker-password=ROBOT_TOKEN \
  [email protected] \
  -n myapp-namespace

# Deployment z imagePullSecret
# k8s/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp
spec:
  replicas: 2
  template:
    spec:
      imagePullSecrets:
        - name: harbor-registry
      containers:
        - name: myapp
          image: harbor.example.com/myproject/myapp:latest

# Dodaj do ServiceAccount (globalnie dla namespace):
kubectl patch serviceaccount default \
  -p '{"imagePullSecrets": [{"name": "harbor-registry"}]}' \
  -n myapp-namespace

Porównanie Harbor vs alternatywy

Cecha Harbor (self-hosted) Docker Hub GitHub Container Registry
Koszt Koszt VPS (~20-80 PLN/msc) Free / Pro $5/msc Free (w pakietach GitHub)
Prywatne repo Nieograniczone 1 free, $5/msc więcej Tak (płatne powyżej limitu)
Skanowanie podatności Trivy (wbudowany) Snyk (plany płatne) Dependabot (code, nie images)
Kontrola dostępu RBAC Pełna (projekty, role) Podstawowa Przez GitHub permissions
Helm Charts Tak (OCI) Nie Tak (OCI)
Pull rate limits Brak 100-200/6h (anonymous) Brak dla uwierzytelnionych

Najczęstsze pytania

Czym jest Harbor i dlaczego warto go używać zamiast Docker Hub? +
Harbor to open-source'owy prywatny rejestr kontenerów Docker (CNCF Graduated Project). W przeciwieństwie do Docker Hub oferuje pełną kontrolę nad danymi, nieograniczone prywatne repozytoria, wbudowane skanowanie podatności obrazów (Trivy), kontrolę dostępu przez RBAC, replikację między rejestrami i obsługę Helm chartów. Jest darmowy i działa na własnym VPS.
Jakie są wymagania sprzętowe dla Harbor? +
Minimalne: 2 vCPU, 4 GB RAM, 40 GB dysku. Zalecane dla produkcji: 4 vCPU, 8 GB RAM, 160+ GB SSD. Harbor używa Docker Compose z wieloma serwisami: core, portal, registry, jobservice, database (PostgreSQL), cache (Redis), trivy i notary. Dysk głównie zużywa rejestr obrazów — każdy layer obrazu Docker to osobny plik.
Co to jest robot account w Harbor? +
Robot account to konto maszynowe przeznaczone do użycia w pipeline CI/CD zamiast danych osobowego użytkownika. Ma ograniczony czas ważności (np. 365 dni), wybrany zestaw uprawnień (pull, push, delete) i zakres — system lub konkretny projekt. Używasz go jako DOCKER_USERNAME i DOCKER_PASSWORD w secretach GitHub/GitLab. Po kompromitacji możesz go unieważnić bez wpływu na konta ludzkie.
Jak Harbor integruje się z Kubernetes? +
Kubernetes pobiera obrazy z Harbor przez imagePullSecret — Secret typu kubernetes.io/dockerconfigjson z credentials robota Harbor. W manifeście Deployment dodajesz imagePullSecrets. Harbor obsługuje też Helm charts jako OCI artifacts — możesz używać go jako Helm registry. Dla k3s z cert-managerem możesz skonfigurować self-signed cert Harbor jako zaufane CA.

Sprawdź oferty pasujące do tego scenariusza

Poniżej masz szybkie przejścia do ofert i stron z kodami rabatowymi tam, gdzie są dostępne.