Skip to content
Menu
msandor honlapja
  • Bemutatkozás
msandor honlapja

Harbor: ha nem elégszel meg a mezei docker registry tudásával

Posted on 2026.04.03.2026.04.03.

A dockeres pályafutásom kezdetén mások konténereit futtattam. Idővel beláttam, hogy meg kell tanulnom sajátot készíteni. Amit nem is lenne rossz máshonnan elérni. Ezért feltettem -stílszerűen- dockerbe egy docker registry-t a NAS-omra. Ezt beraktam egy apache reverse-proxy mögé, ami letsencrypttel csinálta a certet is hozzá, azaz végre nem kellett a docker konfigjában felvenni a saját registrymet. Ez a registry publikus volt. Ami nem minden esetben kívánatos. Ezért feltettem még egy registry-t a NAS-ra egy másik hoszt név mögé, amit felhasználónév/jelszó párossal láttam el. Így külön tudtam kezelni a publikus és a privát konténereim lemezképeit. Évekig használtam ezt a modellt.

Idővel igény született arra, hogy takarítsam ki a feleslegessé vált konténereket, ezért kerestem hozzá GUI-t, ami szintén dockerben futott 🙂

Fapados volt, de pont azt tudta, amire szükségem volt. Cserébe beérte kb 32 MB memóriával!

Aztán arra is igényem született, hogy az általam készített konténereket biztonsági szempontból is vizsgáljam. Erre találtam parancssoros megoldást.

Valamikor a tavalyi nyár folyamán ajánlotta a legjobb barátom a Harbort. Idő hiányában csak ősszel tudtam kipróbálni. Viszont annyira megtetszett, hogy azonnal át is költöztettem rá minden általam készített konténer lemezképét.

Miben különbözik az eddig kézzel összetákolt megoldásomtól?

Tudja mindazt, amit eddig megvalósítottam, azaz nyilvános és privát docker registry, webes felület, beépített vulnerability scanner (Trivy), mindezt egy (majdnem) alkalmazásban. Ezt úgy kell érteni, hogy a telepítője több konténert fog futtatni, amiből az egyik egy docker registry, egy webes felület, egy trivy, egy db, stb. Számunkra ez lényegtelen, nekünk egy fájlt kell letöltenünk, amit elindítva válaszolni kell néhány kérdésre, és készen is vagyunk!

Nálam minden webről elérhető alkalmazásomnak saját hoszt neve van, így párhuzamosan futhat a két régi docker registry és a harbor által kezelt docker registry.

Hogyan kell telepíteni és elindítani?

Töltsük le innen az online telepítőt (most minden parancsot rootként fogok kiadni):

# wget https://github.com/goharbor/harbor/releases/download/v2.15.0/harbor-online-installer-v2.15.0.tgz

csomagoljuk ki:

# tar -xvzf harbor-online-installer-v2.15.0.tgz

lépjünk be a kicsomagolt mappába:

# cd harbor

másoljuk le a minta konfigot:

# cp harbor.yml.tmpl harbor.yml

nyissuk meg szerkesztésre a kedvenc szövegszerkesztőnkkel, majd az alábbi paramétereket ízlés szerint módosítsuk:

  • hostname
  • port (keress neki szabad portot, pl 1080)
  • ha nincs certed, kommentezd ki a https, port: 443, certificate, private_key sorokat
  • external url: ha van feloldható „A” rekordod, akkor használd, ha nincs, jó lesz az IP cím is, pl: http://192.168.7.83:1080
  • a data_volume olyan kötetre mutasson, ahol van kellő mennyiségű szabad hely

végül futtassuk le a telepítőt (ha nincs szükséged a trivy-re, hagyd el a –with-trivy kapcsolót):

# ./install.sh --with-trivy

létrejönnek a szükséges fájlok, és ezzel a lendülettel el is fogja indítani, valami ehhez hasonlót fogsz Te is látni:

[Step 0]: checking if docker is installed ...

Note: docker version: 29.3.1

[Step 1]: checking docker-compose is installed ...

Note: Docker Compose version v5.1.1


[Step 2]: preparing environment ...

[Step 3]: preparing harbor configs ...
prepare base dir is set to /home/msandor/docker/labor/harbor
Unable to find image 'goharbor/prepare:v2.15.0' locally
v2.15.0: Pulling from goharbor/prepare
f32f037feefe: Pull complete 
4c2982dae435: Pull complete 
ae336c765443: Pull complete 
8d8b772dcbb9: Pull complete 
c5492c5b1bc5: Pull complete 
ee23ef315e24: Pull complete 
57ce8eacacde: Pull complete 
d090949c6c2f: Pull complete 
9cc423d719f5: Pull complete 
e67badfac80f: Pull complete 
Digest: sha256:ae027b38b3251a5b243e3d642cea6480bafe0f737156beab1ae5d06b1890cd7a
Status: Downloaded newer image for goharbor/prepare:v2.15.0
WARNING:root:WARNING: HTTP protocol is insecure. Harbor will deprecate http protocol in the future. Please make sure to upgrade to https
Generated configuration file: /config/portal/nginx.conf
Generated configuration file: /config/log/logrotate.conf
Generated configuration file: /config/log/rsyslog_docker.conf
Generated configuration file: /config/nginx/nginx.conf
Generated configuration file: /config/core/env
Generated configuration file: /config/core/app.conf
Generated configuration file: /config/registry/config.yml
Generated configuration file: /config/registryctl/env
Generated configuration file: /config/registryctl/config.yml
Generated configuration file: /config/db/env
Generated configuration file: /config/jobservice/env
Generated configuration file: /config/jobservice/config.yml
copy /data/secret/tls/harbor_internal_ca.crt to shared trust ca dir as name harbor_internal_ca.crt ...
ca file /hostfs/data/secret/tls/harbor_internal_ca.crt is not exist
copy  to shared trust ca dir as name storage_ca_bundle.crt ...
copy None to shared trust ca dir as name redis_tls_ca.crt ...
loaded secret from file: /data/secret/keys/secretkey
Generated configuration file: /config/trivy-adapter/env
Generated configuration file: /compose_location/docker-compose.yml
Clean up the input dir


Note: stopping existing Harbor instance ...


[Step 4]: starting Harbor ...
[+] up 81/81
 ✔ Image goharbor/harbor-core:v2.15.0          Pulled                                                                                                                                   4.9ss
 ✔ Image goharbor/harbor-registryctl:v2.15.0   Pulled                                                                                                                                   16.4s
 ✔ Image goharbor/harbor-portal:v2.15.0        Pulled                                                                                                                                   13.0s
 ✔ Image goharbor/registry-photon:v2.15.0      Pulled                                                                                                                                   16.8s
 ✔ Image goharbor/redis-photon:v2.15.0         Pulled                                                                                                                                   19.0s
 ✔ Image goharbor/harbor-db:v2.15.0            Pulled                                                                                                                                   15.9s
 ✔ Image goharbor/nginx-photon:v2.15.0         Pulled                                                                                                                                   7.8ss
 ✔ Image goharbor/trivy-adapter-photon:v2.15.0 Pulled                                                                                                                                   10.2s
 ✔ Image goharbor/harbor-log:v2.15.0           Pulled                                                                                                                                   6.5ss
 ✔ Image goharbor/harbor-jobservice:v2.15.0    Pulled                                                                                                                                   10.7s
 ✔ Network harbor_harbor                       Created                                                                                                                                  0.2s
 ✔ Container harbor-log                        Started                                                                                                                                  1.5s
 ✔ Container registry                          Started                                                                                                                                  1.1s
 ✔ Container redis                             Started                                                                                                                                  1.2s
 ✔ Container harbor-portal                     Started                                                                                                                                  1.3s
 ✔ Container registryctl                       Started                                                                                                                                  1.4s
 ✔ Container harbor-db                         Started                                                                                                                                  1.4s
 ✔ Container trivy-adapter                     Started                                                                                                                                  1.5s
 ✔ Container harbor-core                       Started                                                                                                                                  1.6s
 ✔ Container nginx                             Started                                                                                                                                  1.9s
 ✔ Container harbor-jobservice                 Started                                                                                                                                  1.9s
✔ ----Harbor has been installed and started successfully.----

Nyissuk meg a megadott IP címen és porton a harbor weboldalát:

A kezdeti felhasználó név: admin, aminek a jelszava: Harbor12345 (ha a yml fájlban nem változtattad meg), sikeres belépés után a kezdőlapra kerülünk:

Most érdemes megváltoztatni a gyári jelszót: admin -> Change Password

Mit érdemes beállítani rajta?

A bal oldali főmenüben navigálva, az Administration -> Users alatt hozzunk létre egy új felhasználót:

Ha ezzel belépsz a harborba, alig fogsz látni valamit:

Meglehetősen kevés menüpontot látunk (2), és a library projekt alatt is csak 3 fülünk lett. Ez elég lehet azoknak a felhasználóknak, akiknek elég az olvasási jog, cserébe nem tudnak kárt okozni a harborban 🙂

Mi van akkor, ha a demo felhasználónk mondjuk egy fejlesztő, és Ő szeretné a saját projektjét adminolni?

Ebben az esetben adminként lépjünk be a gyári projektbe (library), a Members fül alatt tudsz felhasználót hozzáadni:

Több jogosultsági szintből is választhatsz (role), érdemes a legkisebb jogot kiválasztani, ami az új felhasználó munkavégzéséhez szükséges. Ha a példabeli fejlesztőről beszélünk, akkor a Projekt Admin role-t kell kiválasztanunk.

A következő főmenü a Robot Accounts. Ez mire jó, ha tudunk megfelelő jogú felhasználót létrehozni?

Olyan esetekben alkalmazzuk, ahol nincs emberi interakció. Mondok két példát is:

  1. egy közös használatú szerveren szeretnél konténereket letölteni a harborból, de nem szeretnél az admin jogú felhasználóddal bejelentkezni a dockerbe, mivel a jelszót más Linux adminok is láthatják (a docker egy szövegfájlban tárolja base64 kódolással)
  2. egy CICD pipelinba kell csak feltöltő jog a kívánt projektbe (repóba)

Hozzunk létre egy Robot Account-ot, a példában 180 napig lesz érvényes a token:

a 2. szakasznál nem adunk neki semmilyen jogot:

A tokent (secret) jól tedd félre, mert soha többé nem fogod látni! Ha elhagytad, tudsz neki újat adni.

Fontos megemlíteni, hogy a teljes felhasználónév így néz ki: robot$demo. Például így lehet dockerrel belépni a harborba:

# docker login harbor.example.lan -u 'robot$demo'

A következő admin menüpont a Registries

Ahogy a bevezetőben említettem, már volt több mezei docker registry-m, az egyiket felvettem ide:

…hogy a következő menüpontban (Replications) hozzáadhassuk ezt:

Ez a módszer ellentétes irányban is működhet (push).

A Distributions és Labels menüket nem használtam eddig semmire 🙂

A következő admin menüpont a Project Quotas

Eleinte korlátlan a projektek quotája, ezt érdemes lehet beállítani:

A következő admin menüpont az Interrogation Services

Ez amolyan toplista a konténereidben található sebezhetőségekről:

A következő admin menüpont a Clean Up

Itt az idők során felgyűlt szemetet lehet eltakarítani. Pl amikor törölsz egy konténert, a harborból eltűnik, de a diszken ott marad, így feleslegesen foglalja a diszket, és nem érted, hogy a quota miért telt be…

A következő admin menüpont a Job Service Dashboard

Ami egy olyan felület, amely lehetővé teszi a Harbor feladatszolgáltatásban futó feladatok megtekintését és kezelését. Az irányítópulton megnézheted a feladatsorok állapotát, a feladatok ütemezését, valamint a feladatszolgáltatás-készletek és a dolgozók állapotát. Használhatod a függőben lévő vagy futó feladatok leállítására, illetve a feladatszolgáltatási várólista szüneteltetésére vagy folytatására is.

Az utolsó admin menüpont a Configuration

Authentikáció:

    LDAP-ot csak akkor lehet választani, ha az admin az egyetlen felhasználó a rendszerben!

    Security:

    Itt tudsz CVE-ket hozzáadni, amit bizonyos ideig figyelmen kívül fog hagyni:

    System settings:

    Itt lehet beállítani az alapértékeket, logolást, stb:

    És most térjünk vissza a projektünkhöz

    A Policy fül alatt tudjuk beállítani, hogy a repóban egy-egy konténerből hány verziót akarunk megtartani (4):

    Ez és a Clean Up teszi lehetővé, hogy csak a minimális diszket használjuk fel a konténerek tárolásakor.

    A következő érdekes fül a Robot Accounts

    Ha ide veszel fel accountot, akkor értelemszerűen csak ehhez a repóhoz lesz hozzáférése. Még egy érdekesség, az account nevébe bekerül a projekt (repó) neve is:

    És az utolsó fül a Configuration

    1. talán ezt nem kell megmagyarázni, ha bekapcsolod, nyílvánossá válik a repó, de csak letölteni fognak tudni, minden máshoz kell megfelelő jogú felhasználó vagy robot account
    2. ha ezt bekapcsolod, csak akkor engedi a konténert letölteni, ha Cosign-al alá van írva
    3. ha ezt bekapcsolod, csak akkor engedi a konténert letölteni, ha a biztonsági szkenner(ek) által talált legmagasabb sebezhetőség kisebb, mint a beállított érték
    4. a példában Critical (a legmagasabb szint)
    5. ha ezt bekapcsolod, automatikusan leszkenneli a feltöltés után a konténert
    6. ha ezt bekapcsolod, automatikusan elkészíti az SBOM listát a feltöltés után a konténerről

    De mi az az SBOM lista?

    A Software Bill of Materials (SBOM) egy szoftveralkalmazás összetevőinek, könyvtárainak és függőségeinek részletes, strukturált jegyzéke, amely lényegében a kód „összetevőlistája”. Segítségével azonosíthatók a biztonsági rések, kezelhetők a licencek, és növelhető a szoftverellátási lánc átláthatósága. Az automatizált eszközökkel előállított SBOM kulcsfontosságú a modern kiberbiztonsági stratégiákban.

    Az egyik konténerem SBOM listája így néz ki (részlet):

    Végszó

    Néhány perc alatt fel tudsz építeni egy nagyvállalati konténer tárolót, ami idle állapotban ~256 MB memóriával is elketyeg (manapság ennek egyre nagyobb a jelentősége 🙂), és processzoridőt sem kér ha épp nem töltesz le vagy fel. Akár egy raspberryn is röhögve elfut. Mivel nyílt forráskódú, költened sem kell rá. Az egyetlen karbantartás igénye, hogy néha kézzel kell frissíteni. Hasonlóan, mint a telepítéskor, letöltöd a tgz fájlt, kicsomagolod, és újra kiadod konzolon a ./install.sh --with-trivy parancsot. A konfig fájl már létezik, szóval, ha nincs az új verzióban olyan paraméter, amit fel kellene venni a konfigba, akkor nincs más dolgod. Ezért kell elolvasni a letöltés oldalon a frissítési megjegyzéseket.

    Utóirat

    Erősen ajánlott https mögé tenni, egy érvényes certtel, különben a docker is és a kubernetes is be fog neked inteni 😀

    Nálam évekig apache reverse proxy volt erre használva Let’s Encrypt-el, kb fél éve már a kubernetesen futó istio ingressgateway végzi ezt a feladatot (a certbottal).

    Vélemény, hozzászólás? Válasz megszakítása

    Az e-mail címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük

    Kategóriák

    • ansible
    • ArgoCD
    • DevOps
    • docker
    • e-mail
    • git
    • hardware
    • hibakeresés
    • kubernetes
    • ldap
    • Linux
    • MariaDB
    • NAS
    • OpenWrt
    • Proxmox
    • security
    • SNMP
    • Synology
    • Terraform/OpenTofu
    • teszt
    • Unifi
    • UPS
    • vagrant
    • Virtualbox
    • zabbix
    ©2026 msandor honlapja | WordPress Theme by Superb WordPress Themes

    Adatkezelési tájékoztató || Hibát talált az oldalon? Írja meg nekem. || Impresszum || Powered by WordPress

    Oldalunk cookie-kat ("sütiket") használ. Ezen fájlok információkat szolgáltatnak számunkra a felhasználó oldallátogatási szokásairól a legjobb felhasználói élmény nyújtása érdekében, de nem tárolnak személyes információkat, adatokat. Szolgáltatásaink igénybe vételével Ön beleegyezik a cookie-k használatába. Kérjük, hogy kattintson az Elfogadom gombra, amennyiben böngészni szeretné weboldalunkat.ElfogadomAdatvédelmi irányelvek