coldwa.st
Tutte le guideProgrammazioneWebDatiStrumentiDatabaseHaskellConcettiCabal e buildToolchainCompilatorePrestazioniEditor e HLS

Programmazione · DevOps · container

Cos’è Docker?

Di ColdwastAggiornato il 19 giugno 20268 min di lettura#docker#containers#devops
Una nave portacontainer carica di container impilati in un porto, di notte
Una nave portacontainer carica di container impilati in un porto, di notte – Docker riprende l’idea del container marittimo: impacchetti un’app una volta, e gira ovunque allo stesso modo.

«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.

Uno sviluppatore con le cuffie lavora davanti a uno schermo pieno di codice, in una stanza buia illuminata di blu
Uno sviluppatore davanti a uno schermo pieno di codice – Docker permette alla stessa app containerizzata di passare da questo portatile a un server senza sorprese.

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.

Guida indipendente, mantenuta dalla comunità. coldwa.st è un sito di risorse di programmazione; questo articolo è un testo esplicativo inedito e originale su Docker e i container. Gli esempi riflettono strumenti ampiamente diffusi; verifica i dettagli nella documentazione ufficiale di Docker.