Installare Docker sulle distribuzioni Linux più diffuse: guida all'installazione di Docker su Linux
Livello: Intermedio
Tempo stimato: ~15 minuti
Obiettivo: Configurare un ambiente sicuro e decentralizzato installando Docker per ospitare in autonomia (self-hosting) servizi personali come Nextcloud, Bitwarden e Matrix.
Introduzione
Ospitare i propri servizi «cloud» garantisce privacy e piena proprietà dei dati. Per distribuire servizi come Nextcloud (archiviazione di file), Bitwarden (gestione delle password) o Matrix (comunicazione sicura) senza dover gestire complesse dipendenze a livello di host, servono ambienti isolati. In questa guida vedremo come installare Docker su Linux per costruire una base di self-hosting solida e riproducibile. Che serva una configurazione completa di Docker su Linux per un singolo server o per un'intera flotta, ogni passaggio seguente si applica a Ubuntu, Debian e alle distribuzioni compatibili con RHEL. Al termine di questa guida all'installazione di Docker su Linux si avrà un ambiente pronto per la produzione, configurato con impostazioni di sicurezza predefinite conformi alle best practice.
Terminologia
Prima di procedere, assicuratevi di comprendere questi concetti fondamentali:
- Docker: una piattaforma per sviluppare, distribuire ed eseguire applicazioni in ambienti isolati.
- Docker Engine: la tecnologia client-server principale che crea ed esegue i container.
- Container: un componente eseguibile standardizzato che combina il codice sorgente di un'applicazione con le librerie del sistema operativo e le dipendenze necessarie per eseguirla.
- Immagine (Image): un modello di sola lettura con le istruzioni per creare un container.
- Demone Docker (Docker daemon): il servizio in background in esecuzione sull'host che gestisce la creazione, l'esecuzione e la distribuzione dei container.
- Docker CLI: l'interfaccia a riga di comando usata per interagire con il demone.
- Docker Hub: un registry pubblico gestito da Docker per trovare e condividere immagini di container.
- Registry: un sistema di archiviazione e distribuzione delle immagini dei container.
- Installazione: il processo che rende i programmi pronti per l'esecuzione.
- Gestore di pacchetti: uno strumento software che automatizza l'installazione, l'aggiornamento, la configurazione e la rimozione dei programmi.
- Repository: una posizione centrale in cui vengono archiviati e mantenuti i pacchetti software.
- Repository ufficiale di Docker: la fonte attendibile gestita da Docker per ottenere pacchetti software stabili.
- Pacchetto: un archivio di file compresso che contiene tutti i file di una specifica applicazione.
- Dipendenza: un programma o una libreria richiesti da un altro programma per funzionare correttamente.
- Versione stabile (Stable release): una versione del software sottoposta a test approfonditi e considerata affidabile per l'uso in produzione.
- Versione: uno stato univoco del software che riflette le sue specifiche funzionalità e correzioni.
Prerequisiti
Prima di iniziare, assicurarsi che siano soddisfatte le seguenti condizioni:
- Sistema operativo: Ubuntu 20.04/22.04/24.04 LTS, Debian 11/12/13 o compatibile con RHEL (AlmaLinux, Rocky, RHEL) 8/9/10
- Accesso: accesso sudo o root al server
- Conoscenze richieste: buona padronanza della riga di comando di Linux
Passaggio 1: Configurare il repository di Docker
Per ottenere la versione più recente, sicura e stabile, utilizzare sempre il repository ufficiale di Docker anziché i repository predefiniti del sistema operativo.
Per Ubuntu:
Per prima cosa, aggiornare l'indice del gestore di pacchetti di Linux e installare i pacchetti necessari per consentire ad apt di usare un repository tramite HTTPS:
sudo apt update sudo apt install ca-certificates curl gnupg lsb-release
Aggiungere la chiave GPG ufficiale di Docker:
sudo mkdir -m 0755 -p /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \ sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
Configurare il repository stabile:
echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \ https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Per Debian:
I passaggi per installare Docker su Debian ricalcano il flusso di Ubuntu, ma puntano all'URL del repository specifico per Debian. Per prima cosa, aggiornare l'indice del gestore di pacchetti di Linux e installare i pacchetti necessari:
sudo apt update sudo apt install ca-certificates curl gnupg lsb-release
Aggiungere la chiave GPG ufficiale di Docker:
sudo mkdir -m 0755 -p /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/debian/gpg | \ sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
Configurare il repository stabile:
echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \ https://download.docker.com/linux/debian $(lsb_release -cs) stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Per sistemi compatibili con RHEL (AlmaLinux, Rocky, RHEL):
Installare il pacchetto yum-utils e configurare il repository stabile:
sudo yum install -y yum-utils sudo yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo
Docker pubblica i pacchetti per tutte le distribuzioni compatibili con RHEL (incluse AlmaLinux e Rocky Linux) sotto il percorso di repository centos. L'uso di questo URL è previsto e pienamente supportato.
Risultato: Il repository di Docker è ora aggiunto al sistema, consentendo al gestore di pacchetti di recuperare i pacchetti Docker più recenti.
Passaggio 2: Installare Docker su Ubuntu e Debian
Con il repository di Docker configurato, procedere con l'installazione di Docker Engine su Ubuntu (o Debian: i comandi sono identici). Questo passaggio vale per entrambe le distribuzioni.
Per prima cosa, rimuovere eventuali pacchetti in conflitto forniti dai repository del sistema operativo:
sudo apt remove docker.io podman-docker containerd runc
Aggiornare nuovamente l'indice dei pacchetti di apt e usare il gestore di pacchetti di Linux per installare i componenti necessari:
sudo apt update sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin \ docker-compose-plugin
Risultato: Il comando viene eseguito e recupera dal repository di Docker i pacchetti e tutte le dipendenze necessarie. Il gestore di pacchetti dovrebbe completare l'installazione di Docker Engine senza errori.
docker-ce indica Docker Community Edition, la versione gratuita ideale per chi fa self-hosting.
Passaggio 3: Installare Docker su sistemi compatibili con RHEL (AlmaLinux, Rocky, RHEL)
Sui sistemi basati su RHEL, usare yum per installare Docker Engine.
Per prima cosa, rimuovere eventuali pacchetti in conflitto forniti dai repository del sistema operativo:
sudo yum remove docker docker-client docker-client-latest docker-common \ docker-latest docker-latest-logrotate docker-logrotate docker-engine \ podman runc
Eseguire il comando seguente:
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin \ docker-compose-plugin
Risultato: Il gestore di pacchetti installa i pacchetti necessari. Verrà richiesto di accettare la chiave GPG (a meno che non si passi il flag -y); confermarla. Al termine comparirà un messaggio di successo.
Passaggio 4: Verifica dell'installazione di Docker Engine
Dopo l'installazione, il comportamento del demone Docker varia a seconda della distribuzione. Su Ubuntu e Debian, docker.service si avvia automaticamente al termine dell'installazione. Sulle distribuzioni della famiglia RHEL, no.
Solo famiglia RHEL: se il processo di installazione ha aggiornato il kernel (ad esempio tramite una dipendenza kernel-core), riavviare il server prima di avviare il servizio Docker:
sudo reboot
Saltare questo passaggio può far fallire systemctl start docker con errori relativi a br_netfilter / addrtype, perché il kernel in esecuzione non corrisponde più ai moduli installati.
Quando il server è in esecuzione con il kernel aggiornato, avviare e abilitare il servizio. I comandi seguenti sono idempotenti e sicuri da eseguire su qualsiasi sistema:
sudo systemctl start docker sudo systemctl enable docker
Risultato: Il demone Docker si avvia e il sistema crea un collegamento simbolico per assicurarne l'avvio automatico a ogni riavvio.
Verificare la riuscita dell'installazione di Docker Engine eseguendo l'immagine hello-world:
sudo docker run hello-world
Risultato: La Docker CLI contatta il demone Docker, scarica l'immagine hello-world da Docker Hub ed esegue un container. Nel terminale dovrebbe comparire il messaggio «Hello from Docker!».
Passaggio 5: Operazioni successive all'installazione di Docker
Per impostazione predefinita, l'esecuzione dei comandi Docker richiede sudo. Per eseguirli come utente non root, è necessario aggiungere il proprio utente al gruppo docker. Queste sono le operazioni post-installazione di Docker essenziali per gestire comodamente la propria infrastruttura self-hosted.
Creare il gruppo docker (se non esiste già):
getent group docker || sudo groupadd docker
Aggiungere il proprio utente al gruppo docker:
sudo usermod -aG docker $USER
Risultato: L'utente è stato aggiunto al gruppo. Perché le modifiche abbiano effetto, è necessario disconnettersi e riconnettersi, oppure attivare la nuova appartenenza al gruppo nella sessione corrente:
newgrp docker
newgrp docker crea una nuova shell con l'appartenenza ai gruppi aggiornata. Qualsiasi comando docker eseguito in seguito funzionerà senza sudo, ma solo all'interno di questa nuova shell. L'apertura di un altro terminale richiede comunque una nuova connessione completa.
l'appartenenza al gruppo docker concede privilegi equivalenti all'accesso root sull'host. Negli ambienti self-hosted che privilegiano la sicurezza, valutare seriamente l'esecuzione di Docker in modalità rootless (vedere il Passaggio 6).
Dopo aver eseguito newgrp docker (o dopo essersi disconnessi e riconnessi), verificare la configurazione eseguendo un comando senza sudo:
docker run hello-world
Risultato: Dovrebbe comparire di nuovo il messaggio «Hello from Docker!», a conferma che le operazioni post-installazione di Docker sono andate a buon fine.
Alternativa: installazione rapida tramite script di convenienza
Per ambienti di test o sviluppo, Docker mette a disposizione uno script di convenienza.
Questo metodo non è consigliato per la produzione. Viene eseguito senza blocco della versione (version pinning), esegue un aggiornamento incondizionato se Docker è già installato e installa tutte le dipendenze senza verifica.
Si consiglia di scaricare lo script e di esaminarlo prima dell'esecuzione:
curl -fsSL https://get.docker.com -o get-docker.sh sh get-docker.sh
Passaggio 6 (facoltativo): Eseguire Docker in modalità rootless
Negli ambienti self-hosted, eseguire Docker in modalità rootless aumenta la sicurezza, perché il demone Docker e i container vengono eseguiti come utente non root.
6.1 Prerequisiti
Per prima cosa, arrestare e disabilitare il servizio e il socket Docker a livello di sistema, quindi rimuovere il file del socket:
sudo systemctl stop docker.service docker.socket sudo systemctl disable docker.service docker.socket sudo rm -f /var/run/docker.sock
Verificare che per l'utente siano configurati subuid e subgid (di solito impostati automaticamente):
cat /etc/subuid cat /etc/subgid
Abilitare il lingering per l'utente, in modo che il demone possa avviarsi all'avvio del sistema:
sudo loginctl enable-linger $USER
6.2 Installare i pacchetti aggiuntivi
Per Ubuntu/Debian:
sudo apt install docker-ce-rootless-extras uidmap dbus-user-session
Per AlmaLinux/RHEL (shadow-utils fornisce uidmap ed è di solito preinstallato):
sudo yum install docker-ce-rootless-extras
6.3 Installare il demone rootless
Eseguire lo script di installazione da una sessione di login completa dell'utente di destinazione (non da sudo su né da una shell SSH senza login). Se ci si trova in un contesto senza login, esportare prima le variabili necessarie:
export XDG_RUNTIME_DIR=/run/user/$(id -u) export DBUS_SESSION_BUS_ADDRESS=unix:path=$XDG_RUNTIME_DIR/bus
Quindi eseguire lo script di installazione:
dockerd-rootless-setuptool.sh install
La prima esecuzione dello script di installazione subito dopo l'abilitazione del lingering potrebbe essere instabile. Se il demone non si avvia, è sufficiente rieseguire lo script di installazione.
6.4 Configurare le variabili d'ambiente
Aggiungere le seguenti variabili al file di configurazione della shell (ad es. ~/.bashrc):
export PATH=/usr/bin:$PATH export DOCKER_HOST=unix:///run/user/$(id -u)/docker.sock
Caricare il file (source) o riavviare la shell per applicare le modifiche.
6.5 Limitazioni della modalità rootless
- Non è possibile pubblicare porte < 1024 (Docker offre soluzioni alternative come
setcap, l'inoltro delle porte conslirp4netnso il routing). - Nessun supporto per
--net=host. - La modalità Swarm e le reti overlay non sono supportate.
- AppArmor non è supportato.
- Il flag
--privilegednon concede l'accesso root a livello di host. - I dati sono archiviati in
~/.local/share/docker(da considerare per backup e quote). - Richiede cgroup v2.
- Utilizza il driver di archiviazione
overlayfsanzichéoverlay2.
Rollback
Se è necessario annullare l'installazione di Docker su Linux, sia essa una configurazione standard o rootless, seguire i passaggi seguenti nell'ordine indicato.
1. Rollback della modalità rootless (saltare se non era stata configurata):
Se è stata configurata la modalità rootless, annullare prima queste modifiche, prima di rimuovere i pacchetti:
dockerd-rootless-setuptool.sh uninstall rm -rf ~/.local/share/docker sudo loginctl disable-linger $USER
La disinstallazione della modalità rootless eseguita dopo la rimozione (purge) dei pacchetti non riuscirà, perché lo script di installazione fa parte del pacchetto docker-ce-rootless-extras. Disinstallare sempre la modalità rootless mentre i pacchetti sono ancora presenti.
2. Rimuovere i pacchetti:
Debian/Ubuntu:
sudo apt purge docker-ce docker-ce-cli containerd.io docker-buildx-plugin \ docker-compose-plugin docker-ce-rootless-extras sudo rm -rf /var/lib/docker /var/lib/containerd sudo rm -f /etc/apt/sources.list.d/docker.list /etc/apt/keyrings/docker.gpg
AlmaLinux/Rocky/RHEL:
sudo yum remove docker-ce docker-ce-cli containerd.io docker-buildx-plugin \ docker-compose-plugin docker-ce-rootless-extras sudo rm -rf /var/lib/docker /var/lib/containerd sudo rm -f /etc/yum.repos.d/docker-ce.repo
3. Rimuovere il gruppo:
sudo groupdel docker || true
La rimozione dei pacchetti non elimina automaticamente immagini, container, volumi o file di configurazione personalizzati. I comandi rm -rf eliminano in modo permanente queste directory di dati.
Conclusione
L'installazione di Docker su Linux è completata e verificata. La base è ora configurata in sicurezza. Potete procedere con la distribuzione dei container per i vostri strumenti self-hosted, mantenendo il pieno controllo sui file di Nextcloud, sulle cassaforti di Bitwarden e sulle comunicazioni di Matrix.
Versione del documento: 1.0
Ultimo aggiornamento: maggio 2026
Responsabile: Team di documentazione tecnica