Quando si lavora con Docker, si utilizzano delle immagini — file eseguibili che contengono tutto ciò che serve per eseguire un’applicazione, inclusi il codice sorgente, le librerie e le dipendenze. Queste immagini vengono archiviate in repository specializzati chiamati registri, che possono essere privati o pubblici.
Il registro pubblico più conosciuto è Docker Hub, dove è possibile trovare molte immagini ufficiali come Nginx, PostgreSQL, Alpine, Ubuntu, Node e MongoDB. Gli utenti possono registrarsi su Docker Hub e archiviare le proprie immagini — per impostazione predefinita, con un registro pubblico e tre registri privati. Docker Hub è il registro predefinito che Docker utilizza per scaricare (pull) le immagini.
Questa guida spiega come modificare il registro predefinito di Docker e utilizzare un registro alternativo.
Un modo semplice per usare registri esterni è sfruttare quelli offerti da fornitori terzi come Google o Amazon.
Ecco un elenco di registri pubblici che puoi utilizzare:
|
URL del registro |
Proprietario |
|
|
|
|
Amazon |
|
|
Red Hat |
|
|
Red Hat |
|
|
Red Hat |
⚠️ Nota: l’utilizzo di registri Docker esterni può comportare rischi per la sicurezza. Procedi con cautela.
Di seguito troverai i passaggi per sostituire Docker Hub con un altro registro predefinito.
Apri il file daemon.json con un editor di testo.
Se Docker è installato in modalità non rootless, il file si trova in:
/etc/docker/daemon.json
Se il file non esiste, crealo con:
nano /etc/docker/daemon.json
Per Docker in modalità rootless, il file si trova nella directory personale dell’utente:
~/.config/docker/daemon.json
Crealo se necessario:
nano ~/.config/docker/daemon.json
Aggiungi il seguente parametro per impostare un nuovo registro predefinito (in questo esempio, il mirror di Google):
{
"registry-mirrors": ["https://mirror.gcr.io"]
}
Salva e chiudi il file.
Riavvia poi il servizio Docker per applicare le modifiche:
systemctl reload docker
Da questo momento, Docker utilizzerà il nuovo registro per scaricare le immagini.
Ad esempio, per scaricare l’immagine Alpine dal registro di Google:
docker pull mirror.gcr.io/alpine
Puoi anche specificare una versione precisa, ad esempio:
docker pull mirror.gcr.io/nginx:1.25.2
Apri il file daemon.json, che si trova in:
C:\Users\<tuo_nome_utente>\.docker\daemon.json
Aggiungi il parametro:
{
"registry-mirrors": ["https://mirror.gcr.io"]
}
Salva il file e riavvia Docker. Fai clic con il tasto destro sull’icona di Docker nella barra delle applicazioni e seleziona Restart.
Puoi anche configurare il registro tramite l’interfaccia di Docker Desktop:
vai su Settings → Docker Engine e aggiungi:
{
"registry-mirrors": ["https://mirror.gcr.io"]
}
Clicca su Apply & Restart per salvare e applicare le modifiche. Dopo il riavvio, Docker utilizzerà il nuovo registro per i download.
Ad esempio, per scaricare un’immagine curl:
docker pull mirror.gcr.io/curlimages/curl
Oppure per scaricare una versione specifica:
docker pull mirror.gcr.io/node:21-alpine
È anche possibile utilizzare Nexus per gestire le immagini Docker. Nexus supporta repository proxy, che memorizzano nella cache le immagini scaricate da registri esterni come Docker Hub. In questo modo Nexus può agire come registro proxy di caching, utile quando i registri esterni non sono disponibili.
Accedi a Nexus come amministratore o come utente con diritti di creazione repository.
Vai su Server Administration and Configuration → Repositories.
Clicca su Create repository e scegli il tipo docker (proxy).
Compila i campi richiesti:
Name: assegna un nome univoco al repository.
Online: lascia selezionata questa opzione per mantenerlo attivo.
Proxy server: se Nexus è dietro un proxy (ad esempio Nginx), non serve impostare porte di autenticazione.
In caso contrario, assegna una porta unica per HTTP o HTTPS.
Allow anonymous docker pull: se abilitato, sarà possibile scaricare immagini senza autenticazione.
Se disattivato, sarà necessario eseguire il login prima del pull.
Remote storage: specifica l’URL del registro esterno (es. https://registry-1.docker.io per Docker Hub).
Dopo aver creato il repository, accedi (se richiesto) con:
docker login <indirizzo_registro_nexus>
Per scaricare un’immagine:
docker pull <indirizzo_registro_nexus>/nome_immagine:tag
Esempio: scaricare un’immagine Python con tag 3.8.19-alpine:
docker pull nexus-repo.com/python:3.8.19-alpine
⚠️ Suggerimento di sicurezza: evita di utilizzare il tag latest, poiché potrebbe contenere bug o vulnerabilità.
In questo articolo abbiamo esaminato diversi metodi per scaricare e archiviare immagini Docker. L’uso di registri esterni può essere utile quando Docker Hub non è disponibile. Se non ti fidi dei registri pubblici, puoi sempre configurare un registro Docker privato o pubblico autonomamente, ad esempio con Nexus o Harbor.