Programmazione · DevOps · container
Cos’è Docker?
«Funziona sulla mia macchina» è una delle battute più vecchie del software – e il problema che Docker è stato progettato per eliminare. Docker impacchetta un’applicazione con tutto ciò di cui ha bisogno per eseguirsi, così da comportarsi allo stesso modo su un portatile, sulla macchina di un collega e su un server di produzione. Questa guida spiega cos’è Docker, in cosa i container differiscono dalle macchine virtuali, i concetti che contano e dove si colloca Docker accanto a strumenti come Kubernetes.
La definizione breve
Docker è una piattaforma per costruire, condividere ed eseguire applicazioni in container. Un container raggruppa il tuo codice e le sue dipendenze – librerie, runtime, configurazione – in un’unità isolata e portatile. Poiché il container porta con sé il proprio ambiente, si esegue allo stesso modo ovunque sia installato Docker, eliminando la categoria di bug «funziona qui ma non là».
Container vs macchine virtuali
Entrambi isolano il software, ma a livelli diversi. Una macchina virtuale emula un computer intero, con il proprio sistema operativo completo, sopra un hypervisor – potente, ma pesante: ogni VM pesa gigabyte e si avvia lentamente. Un container condivide il kernel del sistema operativo della macchina host e impacchetta solo l’app e le sue dipendenze. Il risultato è molto più leggero: i container pesano tipicamente megabyte, si avviano in pochi secondi, e se ne possono far girare molti di più sullo stesso hardware.
Il compromesso è l’isolamento. Le VM offrono una separazione più forte perché ognuna ha il proprio OS; i container sono più efficienti ma condividono il kernel, quindi l’isolamento è buono anziché assoluto. Molti sistemi reali usano entrambi – container che girano in VM nel cloud.

I concetti chiave
- Immagine – un modello in sola lettura che definisce cosa c’è in un container: i livelli di OS, la tua app e le sue dipendenze. Si costruisce un’immagine una volta e si avviano più container a partire da essa.
- Container – un’istanza in esecuzione di un’immagine. È il processo vivo e isolato; si può avviare, fermare ed eliminare senza toccare l’immagine.
- Dockerfile – una ricetta in testo semplice che elenca i passi per costruire un’immagine (partire da una base, copiare il codice, installare le dipendenze, definire il comando di avvio). Rende le build riproducibili.
- Registry – un repository di immagini. Docker Hub è il registry pubblico più noto; i team ne gestiscono anche di privati. Si pushano le immagini per condividerle e si pullano per eseguirle.
- Volume – uno storage che vive al di fuori del ciclo di vita del container, così che i dati sopravvivano alla sostituzione di un container. I container sono usa e getta; i volumi conservano ciò che deve persistere.
Com’è un flusso di lavoro tipico
Scrivi un Dockerfile, lo costruisci in un’immagine ed esegui quell’immagine come container. In locale avvii forse un singolo container; in produzione pushi l’immagine in un registry e la esegui sui server. Poiché l’immagine è lo stesso artefatto ovunque, l’app che i tuoi colleghi e i tuoi server eseguono è, byte per byte, quella che hai testato – è tutto qui il punto.
Perché Docker conta
Ha reso facili gli ambienti coerenti, e questo ha sbloccato molte cose: deployment da servizio a servizio affidabili, un onboarding rapido (un comando invece di una pagina di passi di configurazione) e la base delle pipeline CI/CD e dei microservizi. I container sono ormai l’unità di deployment predefinita nell’infrastruttura moderna, il che spiega perché tutto l’ecosistema – registry, orchestrazione, runtime cloud – parla «container».
Docker vs Kubernetes
Vengono spesso citati insieme ma risolvono problemi diversi. Docker costruisce ed esegue container individuali. Kubernetes è un orchestratore: esegue e coordina molti container su molte macchine – li pianifica, riavvia quelli che falliscono, scala verso l’alto e verso il basso e li mette in rete. In breve, Docker impacchetta ed esegue un container; Kubernetes gestisce una flotta. Si può usare Docker senza Kubernetes; Kubernetes esegue container costruiti secondo lo stesso standard che Docker ha reso popolare. Consulta la nostra guida completa su Kubernetes – e in ogni caso, i tuoi container hanno bisogno di un posto dove girare, di solito un VPS.
I compromessi onesti
Docker non è senza costi. I container condividono il kernel host: non è quindi una frontiera di sicurezza dura come lo è una VM – i carichi sensibili potrebbero volere un isolamento di livello VM. Le applicazioni con stato (database, tutto ciò che ha dati locali importanti) richiedono una progettazione attenta di volumi e backup, dato che i container sono pensati per essere usa e getta. E c’è una curva di apprendimento: immagini, rete e volumi richiedono tempo per essere assimilati. Per la maggior parte dei team, la coerenza e la rapidità ne valgono comunque la pena.
FAQ
Docker è una macchina virtuale? No. Una VM emula un computer intero con il proprio sistema operativo; un container Docker condivide il kernel dell’OS host e impacchetta solo l’app e le sue dipendenze, il che lo rende molto più leggero e veloce all’avvio.
Docker è gratuito? Docker Engine, la tecnologia di base, è open source e gratuita. Docker propone anche offerte a pagamento per la sua applicazione Desktop e i suoi servizi nelle grandi organizzazioni, ma si possono costruire ed eseguire container senza pagare.
Serve Docker per usare Kubernetes? Non Docker il prodotto in particolare, ma servono i container. Kubernetes orchestra container costruiti secondo standard aperti che Docker ha contribuito a stabilire, quindi le competenze si trasferiscono direttamente.
Cos’è un Dockerfile? Un file in testo semplice con i passi per costruire un’immagine – quale base usare, quale codice copiare, quali dipendenze installare e il comando da eseguire. Rende le build delle immagini riproducibili e leggibili.
I container sono l’unità su cui poggiano i deployment; le app che contengono espongono spesso un’API e si scrivono in un IDE. Sfoglia altre spiegazioni chiare nel nostro indice delle guide.
Domande frequenti
Cos’è Docker in parole semplici?
Docker è uno strumento che impacchetta un’applicazione con tutto ciò di cui ha bisogno per eseguirsi – codice, librerie, runtime e configurazione – in un’unica unità portatile chiamata container. Questo container si esegue poi allo stesso modo su qualsiasi macchina dove Docker è installato, così che il software si comporti in modo identico sul portatile di uno sviluppatore e su un server di produzione.
Qual è la differenza tra un container e una macchina virtuale?
Una macchina virtuale emula un computer intero, sistema operativo completo incluso: è quindi voluminosa (gigabyte) e lenta all’avvio, ma fortemente isolata. Un container condivide il kernel del sistema host e raggruppa solo l’app e le sue dipendenze: è piccolo (megabyte), si avvia in pochi secondi ed è più efficiente, con un isolamento buono ma non assoluto. Molti sistemi eseguono container in VM per combinare i due.
Qual è la differenza tra Docker e Kubernetes?
Docker costruisce ed esegue container individuali. Kubernetes è un sistema di orchestrazione che esegue e coordina molti container su molte macchine – pianificazione, scalabilità, riavvio e messa in rete. Docker gestisce un container; Kubernetes gestisce una flotta. Sono complementari anziché concorrenti.
Docker è ancora usato nel 2026?
Sì. I container sono l’unità standard di deployment nel software moderno, e l’ecosistema – registry, pipeline CI/CD, runtime cloud e orchestratori come Kubernetes – è costruito attorno al modello di container che Docker ha reso popolare. Il cuore Docker Engine resta open source e ampiamente usato.