Docker è una piattaforma open source che permette di eseguire applicazioni all’interno di container: ambienti isolati, leggeri e portabili. A differenza delle macchine virtuali, i container condividono il kernel del sistema operativo, si avviano in pochi secondi e consumano molta meno memoria e CPU.
I vantaggi principali di Docker sono:
- Portabilità: un container funziona allo stesso modo su qualsiasi macchina
- Isolamento: ogni servizio gira nel proprio ambiente senza interferire con gli altri
- Riproducibilità: tutta la configurazione è definita in file versionabili
Per chi fa self-hosting, questi aspetti semplificano enormemente l’installazione e la gestione dei servizi. Nella sezione Docker di questo sito trovi decine di guide su container pronti all’uso, con configurazioni testate e pronte da copiare.
Installazione di Docker Engine
La documentazione ufficiale descrive la procedura per ogni distribuzione. In questa guida utilizzeremo Fedora 43, ma i passaggi sono simili anche su altre distro.
Il primo passo consiste nell’aggiungere la repository ufficiale di Docker al sistema. Una repository è un archivio remoto da cui il gestore dei pacchetti (in questo caso dnf) scarica e aggiorna i programmi. Aggiungendola, il sistema saprà dove trovare le versioni più recenti di Docker:
sudo dnf config-manager addrepo --from-repofile https://download.docker.com/linux/fedora/docker-ce.repoA questo punto si possono installare i pacchetti necessari:
- docker-ce: il motore Docker vero e proprio, che crea e gestisce i container
- docker-ce-cli: l’interfaccia a riga di comando per interagire con Docker
- containerd.io: il runtime che si occupa dell’esecuzione dei container a basso livello
- docker-buildx-plugin: plugin per la creazione di immagini con funzionalità avanzate
- docker-compose-plugin: plugin che permette di definire e avviare applicazioni multi-container tramite file YAML
sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-pluginInfine, è necessario attivare il servizio Docker e abilitarlo all’avvio automatico, in modo che sia disponibile anche dopo un riavvio del sistema:
sudo systemctl enable --now dockerNel video qui sotto è possibile vedere l’intero processo di installazione descritto nei tre passaggi precedenti: dall’aggiunta della repository, all’installazione dei pacchetti, fino all’attivazione del servizio.
Utilizzare Docker con il proprio utente
Per impostazione predefinita, Docker richiede i privilegi di root per funzionare. Questo significa che ogni comando deve essere preceduto da sudo, ad esempio sudo docker ps.
Il motivo è che il demone Docker (dockerd) gira come root e comunica attraverso un socket Unix (/var/run/docker.sock), accessibile solo a root. Aggiungendo il proprio utente al gruppo docker, si ottengono i permessi di lettura e scrittura su quel socket e si può comunicare con il demone senza dover elevare i privilegi ogni volta.
1. Verificare il gruppo docker
Nella maggior parte delle installazioni, il gruppo docker viene creato automaticamente. Per verificarne l’esistenza:
getent group dockerSe il gruppo esiste, l’output sarà simile a docker:x:969:. In caso contrario, è possibile crearlo manualmente con sudo groupadd docker.
2. Aggiungere l’utente al gruppo
Una volta verificata l’esistenza del gruppo, si può aggiungere il proprio utente:
sudo usermod -aG docker $USERIl flag -a indica di aggiungere il gruppo senza rimuovere quelli già assegnati, -G specifica il gruppo da aggiungere e $USER è la variabile d’ambiente che contiene il nome dell’utente corrente.
3. Attivare le modifiche
Le modifiche ai gruppi non hanno effetto sulla sessione corrente. Per applicarle è sufficiente eseguire un logout e un nuovo login. Al rientro, sarà possibile eseguire i comandi Docker senza sudo.
Nel video qui sotto è possibile seguire l’intera procedura. Si parte da un utente che non appartiene ancora al gruppo docker: il comando docker ps restituisce un errore di permessi, mentre sudo docker ps funziona correttamente. Viene poi verificata l’esistenza del gruppo con getent group docker e aggiunto l’utente con sudo usermod -aG docker $USER. Dopo un logout e un nuovo login, il comando docker ps funziona senza sudo.
Considerazioni sulla sicurezza
Aggiungere un utente al gruppo docker equivale a concedergli privilegi di root sul sistema. Docker permette infatti di montare qualsiasi directory dell’host all’interno di un container, eseguire container in modalità privilegiata e accedere a dispositivi e risorse di sistema.
Su un PC personale con un unico utente, questo non rappresenta un problema. Su un server condiviso tra più persone è importante aggiungere al gruppo solo utenti fidati. In ambienti di produzione è consigliabile valutare la modalità Docker Rootless , dove il demone stesso gira senza privilegi di root.