Cos’è Docker?
Docker è una piattaforma open-source che permette di eseguire applicazioni all’interno di ambienti isolati chiamati container.
Un container contiene tutto il necessario per far funzionare un’applicazione, software, librerie e tutte le sue dipendenze. In questo modo un’applicazione può essere installata, aggiornata e/o rimossa senza modificare direttamente il sistema operativo principale.
Questo approccio è particolarmente utile su un server che ospita diversi servizi contemporaneamente, come ad esempio un servizio web, un database o qualsiasi altra applicazione.
Container e macchine virtuali
È importante capire che un container non è una macchina virtuale (Virtual Machine).
Una macchina virtuale (più comunemente chiamata VM) emula un intero computer, includendo un sistema operativo completo al suo interno. Un container invece utilizza il kernel Linux del sistema operativo ospitante, isolando solamente i processi e le risorse necessarie all’applicazione senza dover emulare un intero sistema operativo.
Questo porta diversi vantaggi:
- Leggerezza, i container consumano molte meno risorse rispetto alle macchine virtuali, richiedendo meno RAM e CPU;
- Velocità, un container può essere avviato in pochi secondi;
- Portabilità, la stessa immagine Docker può essere eseguita su macchine differenti mantenendo lo stesso comportamento;
- Semplicità di gestione, installare, aggiornare e/o rimuovere un servizio diventa molto più semplice.
Concetti fondamentali
Prima di iniziare è importante conoscere alcuni concetti fondamentali.
Immagine
Un’immagine Docker è un modello pronto all’uso contenente tutto il necessario per creare un container.
Ad esempio, un’immagine può contenere un server web o un database.
Container
Un container è un’istanza in esecuzione di un’immagine. La stessa immagine può generare più container indipendenti.
Volume
I container sono progettati per essere temporanei, se vengono eliminati, anche i dati al loro interno vengono persi. I volumi Docker permettono di salvare dati persistenti all’esterno del container, come ad esempio:
- database;
- configurazioni;
- file degli utenti;
- dati persistenti dell’applicazione;
Network
Docker permette ai container di comunicare tra loro attraverso reti virtuali.
Questo permette, ad esempio, di creare ambienti isolati dove diversi servizi possono comunicare tra loro senza dover essere necessariamente esposti direttamente sulla rete pubblica.
Docker Compose
Quando un’applicazione è composta da più servizi, gestire manualmente ogni singolo container può diventare complicato.
Docker Compose permette di definire un’intera applicazione attraverso un semplice file YAML, solitamente chiamato:
| |
All’interno del file vengono definiti:
- quali immagini utilizzare;
- quali porte aprire;
- quali volumi montare;
- quali variabili configurare;
- come collegare i vari container tra loro.
Ad esempio, un servizio web potrebbe essere composto da:
Container Web
|
|
Container Database
e Docker Compose permette di avviare l’intera applicazione con un solo comando:
| |
Installazione di Docker su Linux
Vediamo quindi come installare Docker sulle principali distribuzioni Linux.
Debian e derivate
Prima di procedere è consigliato rimuovere eventuali versioni precedenti o pacchetti Docker installati tramite i repository della distribuzione.
Eseguiamo sul terminale:
| |
Installiamo i pacchetti necessari:
Creiamo la directory per le chiavi GPG:
| |
Scarichiamo la chiave ufficiale Docker:
Impostiamo i permessi corretti:
| |
Aggiungiamo il repository ufficiale Docker:
Aggiorniamo nuovamente i repository:
| |
Installiamo Docker Engine e Docker Compose confermando l’installazione quando richiesto:
| |
Red Hat e derivate
Questa procedura è valida per Fedora, Red Hat Enterprise Linux (RHEL), AlmaLinux, Rocky Linux e le relative distribuzioni derivate.
Prima di procedere rimuoviamo eventuali vecchie installazioni:
Installiamo i pacchetti necessari:
| |
Aggiungiamo il repository ufficiale Docker.
Nota: Docker distribuisce un repository dedicato per Fedora, mentre Red Hat Enterprise Linux, AlmaLinux e Rocky Linux utilizzano il repository compatibile con CentOS.
Per Fedora:
| |
Per RHEL, AlmaLinux e Rocky Linux:
| |
Installiamo Docker Engine e Docker Compose:
| |
Arch Linux e derivate
Su Arch Linux Docker è disponibile direttamente nei repository ufficiali della distribuzione.
Digitiamo sul terminale:
| |
Configurazione post installazione
Abilitiamo Docker all’avvio del sistema:
| |
Avviamo quindi il servizio docker:
| |
E verifichiamo che il servizio sia correttamente in esecuzione:
| |

Utilizzare Docker senza “sudo”
Per impostazione predefinita Docker richiede privilegi amministrativi e i comandi devono essere eseguiti tramite sudo.
Per permettere al nostro utente di eseguire i comandi Docker senza utilizzare ogni volta sudo, aggiungiamolo al gruppo docker:
| |
⚠️ Attenzione: L’appartenenza al gruppo
dockerequivale, nella pratica, ad avere privilegi amministrativi sul sistema. Aggiungi solamente utenti di cui ti fidi.
Per rendere effettive le modifiche è necessario effettuare il logout dalla sessione corrente:
| |
E dopo aver effettuato nuovamente l’accesso possiamo verificare che Docker sia stato installato correttamente.
Eseguiamo:
| |
L’output dovrebbe essere simile al seguente:

Infine eseguiamo il classico container di test fornito da Docker:
| |
Se tutto è andato a buon fine, Docker scaricherà automaticamente l’immagine hello-world, creerà un container temporaneo e mostrerà un messaggio di conferma.

Da questo momento potrai installare ed eseguire qualsiasi applicazione distribuita tramite Docker e Docker Compose.
