Il tuo team builda immagini Docker e le spinge su Docker Hub. Funziona, finché qualcuno non si accorge che le immagini pubbliche sono pubbliche, che i pull sono limitati, e che il registro centralizzato di terze parti non ti appartiene. Se il tuo business gira su container, il registro è la cassaforte. Affittarla da un provider è comodo, ma possederla è un'altra cosa. Noi, di Meteora Web, abbiamo scelto Harbor per i progetti che richiedono controllo totale — e in questa guida ti mostriamo perché e come farlo.
Perché un Docker Registry privato conviene alla tua azienda?
Un Docker Registry è il server che conserva e distribuisce le tue immagini. Usare Docker Hub gratis significa accettare limiti di pull rate, code pubbliche e zero controllo sulla retention. In produzione, un pull fallito per rate limit non è un inconveniente: è un deploy bloccato. Con un registro privato, le immagini restano dentro la tua infrastruttura, i pull sono istantanei e i costi sono prevedibili. E se pensi che "tanto usiamo il piano gratuito", ricorda: il piano gratuito di Docker Hub ha limiti di pull che in un ambiente CI/CD si esauriscono in una mattinata.
Il punto non è il prezzo del piano, è la proprietà dei dati. Un registro privato è come il magazzino del tuo negozio: lo gestisci tu, lo proteggi tu, e non dipendi dall'orario di apertura di un fornitore.
Cosa fa Harbor che un registro semplice non fa?
Harbor è un registry enterprise-grade, open source, basato su Docker Distribution. Aggiunge sicurezza e gestione: autenticazione con LDAP/OIDC, policy di retention, scansione vulnerabilità con Trivy, replicazione multi-cluster, e ruoli granulari. In pratica, è la differenza tra un armadietto con lucchetto e una cassaforte con doppia chiave e allarme.
Sponsored Protocol
Come funziona la gestione delle immagini aziendali con Harbor?
Harbor organizza le immagini in progetti. Ogni progetto ha il suo accesso, le sue policy e i suoi membri. Puoi avere un progetto per sviluppo, uno per staging e uno per produzione, ognuno con permessi diversi. Le immagini vengono taggate con convenzioni chiare (es. myapp:1.4.2-prod) e le policy di retention eliminano automaticamente le versioni vecchie. In più, la scansione delle vulnerabilità avviene al push, non quando qualcuno se ne ricorda.
Passaggi pratici per installare Harbor con Docker Compose
Harbor si installa con un installer ufficiale che genera i file di configurazione. Ecco i passi essenziali:
# 1. Scarica l'installer (versione 2.x)
wget https://github.com/goharbor/harbor/releases/download/v2.11.0/harbor-offline-installer-v2.11.0.tgz
tar xzvf harbor-offline-installer-v2.11.0.tgz
cd harbor
# 2. Configura il file harbor.yml
cp harbor.yml.tmpl harbor.yml
# Modifica hostname, porta, e imposta la modalità HTTPS con certificati
# 3. Installa con Docker Compose
sudo ./install.sh
Dopo l'installazione, accedi all'interfaccia web su https://your-registry-domain. Crea un progetto, aggiungi un utente o collega il tuo LDAP, e sei operativo.
Sponsored Protocol
Configurare Docker client per il push e pull
Per usare il registro, il client Docker deve fidarsi del certificato. Se usi un certificato self-signed, aggiungilo alla lista dei registry attendibili su ogni macchina:
# Su Linux, crea la directory e copia il certificato
sudo mkdir -p /etc/docker/certs.d/registry.example.com
sudo cp ca.crt /etc/docker/certs.d/registry.example.com/
sudo systemctl restart docker
# Login e push
docker login registry.example.com
docker tag myapp:latest registry.example.com/myproject/myapp:1.4.2
docker push registry.example.com/myproject/myapp:1.4.2
Da questo momento, ogni deploy in produzione usa il tuo registro. Nessun rate limit, nessuna dipendenza esterna.
Quale strategia di sicurezza adottare per il registro privato?
La sicurezza non è un'opzione, è il requisito minimo. Harbor ti dà gli strumenti, ma devi usarli bene. Ecco cosa funziona nella pratica:
- HTTPS obbligatorio: niente HTTP in chiaro, anche in laboratorio. I certificati self-signed vanno gestiti, non ignorati.
- Scansione automatica delle vulnerabilità: attiva la scansione su push con Trivy. Se un'immagine ha CVE critiche, il pull in produzione viene bloccato.
- Retention policy: tieni solo le ultime N versioni per progetto. Le immagini vecchie sono superficie d'attacco e spreco di storage.
- Accesso basato sui ruoli: gli sviluppatori hanno push sul progetto dev, solo i responsabili hanno accesso a produzione. Il principio del minimo privilegio vale anche per i container.
Come abilitare la scansione delle vulnerabilità con Trivy
Trivy è integrato in Harbor, ma va attivato per progetto. Dalla UI, vai nel progetto, seleziona Configuration e spunta Automatically scan images on push. Per la CLI, puoi usare il comando harbor o l'API REST:
Sponsored Protocol
# Esempio con curl per avviare una scansione
curl -u "admin:password" -X POST https://registry.example.com/api/v2.0/projects/myproject/repositories/myapp/artifacts/1.4.2/scan
Con questa configurazione, se un'immagine contiene una vulnerabilità critica, il team di sicurezza viene notificato prima che arrivi in produzione. Non è burocrazia, è prevenzione.
Come integrare il registro privato nella pipeline CI/CD?
Il registro privato non è un'isola: deve dialogare con la tua pipeline. In GitLab CI, GitHub Actions o Jenkins, l'immagine viene buildata, taggata e pushatta al registro. Poi, in fase di deploy, viene tirata dal registro. Ecco un esempio con GitHub Actions:
name: Build and Push
on:
push:
branches: [main]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Login to Harbor
run: echo "${{ secrets.HARBOR_PASSWORD }}" | docker login registry.example.com -u "${{ secrets.HARBOR_USERNAME }}" --password-stdin
- name: Build and push
run: |
docker build -t registry.example.com/myproject/myapp:${{ github.sha }} .
docker push registry.example.com/myproject/myapp:${{ github.sha }}
Attenzione ai segreti: mai hardcodare le credenziali. Usa i secret del tuo provider CI. E imposta la retention per non accumulare immagini di ogni commit.
Sponsored Protocol
La replicazione multi-sito per la continuità operativa
Harbor supporta la replicazione tra registri. Se hai un cluster in un data center e uno in un altro, puoi replicare le immagini automaticamente. Così, se un sito va giù, l'altro ha già le immagini pronte. È la stessa logica del backup off-site, ma per i container.
Quanto costa un Docker Registry privato rispetto a Docker Hub?
Docker Hub ha piani a pagamento che partono da pochi dollari al mese, ma il costo non è solo il canone. Con Harbor, paghi l'infrastruttura che già possiedi: un server con 4 GB di RAM e 50 GB di storage bastano per iniziare. Se hai già un server per la CI, lo stesso può ospitare Harbor. Il risparmio è doppio: niente canoni ricorrenti e niente limiti di pull. E se il tuo team cresce, Harbor scala senza cambiare fornitore.
Quali errori evitare nella gestione del registro aziendale?
Abbiamo visto progetti arrivarci con problemi che si sarebbero evitati con un minimo di pianificazione. Ecco i tre errori più comuni:
- Lasciare il registro senza backup: se il server muore, muoiono anche le immagini. Configura backup periodici del database e dello storage.
- Tag immutabili: usare
latestin produzione è un disastro. Ogni deploy deve avere un tag univoco, altrimenti non sai cosa stai eseguendo. - Ignorare i log di accesso: Harbor traccia ogni push e pull. Se non guardi i log, non sai chi ha accesso e cosa sta facendo. Controllali almeno una volta al mese.
In sintesi
Un Docker Registry privato con Harbor non è un lusso da grandi aziende. È lo strumento che ti dà il controllo sulle tue immagini, la sicurezza che i tuoi clienti si aspettano e la libertà di non dipendere da un fornitore esterno. Se il tuo business gira su container, il registro è la tua infrastruttura critica. Trattalo come tale.
Sponsored Protocol
Cosa fare adesso:
- Installa Harbor su un server di test con Docker Compose, seguendo i passi sopra.
- Configura un progetto con scansione automatica delle vulnerabilità e una retention policy di 10 versioni.
- Sposta una delle tue immagini di sviluppo da Docker Hub al nuovo registro e verifica il push/pull.
- Integra il login al registro nella tua pipeline CI/CD con i segreti del provider.
- Pianifica il backup del registro: database e storage, con cadenza giornaliera.
Se vuoi approfondire il percorso completo dalla prototipazione alla produzione, leggi il nostro pillar su Docker e containerizzazione. E se ti interessa l'ottimizzazione delle performance, dai un'occhiata alla nostra guida sulle animazioni Tailwind.