Una rivoluzione nel mondo del deploy
Docker è sulla bocca di tutti nel settore IT da ormai diversi anni, ma spesso si sentono opinioni discordanti sul suo utilizzo. C’è chi ne parla come di una grande invenzione, mentre c’è chi teme che sia una sovrastruttura tecnologica non necessaria.
Prima di procedere con qualsiasi tipo di considerazione, è bene chiarire alcuni concetti chiave.
Che cos’è esattamente Docker?
Docker è uno strumento open source di containerizzazione utilizzato principalmente per l’impacchettamento e l’esecuzione rapida di applicazioni su piattaforme architetturalmente diverse. Il modo in cui Docker costruisce e distribuisce rapidamente il software riduce notevolmente il ritardo tra la scrittura del codice e la sua messa in produzione.
Docker è stato sviluppato utilizzando il linguaggio Go (creato da Google, con autori del calibro del pioniere dell’informatica Ken Thompson) ed è stato annunciato per la prima volta nel 2013 a Santa Clara durante l’annuale Python Developers Conference; inutile dire che la reazione dei partecipanti non è stata di accoglienza piena, in quanto l’idea sembrava il risultato di un tentativo di rinnovare tecnologie vecchie per farne qualcosa di non utile.
Da allora Docker ha raccolto più di 100 mila immagini pubbliche che vengono usate migliaia di volte ogni giorno da professionisti e non, ma anche da grandi aziende.
I vantaggi di Docker
Docker ha una serie numerosa di vantaggi che lo rende super utile. Alcuni tra questi sono:
- Isolamento
Docker permette di creare un sistema indipendente dall’ambiente su cui viene installato; sapere che la tua applicazione funzionerà senza problemi su diverse piattaforme toglie un bel peso a chi progetta l’architettura. - Portabilità
Poiché tutte le dipendenze dell’applicazione stessa si trovano nello stesso blocco (o, in termini tecnici, container), è facile poter trasportare il software da un luogo all’altro, affidando a Docker la sua portabilità. - Leggerezza
Al contrario di molti sistemi che vengono installati tramite macchine virtuali, Docker offre la possibilità di creare un sistema che viene posta strutturalmente sopra l’architettura di base necessaria a farla funzionare; in questo modo, non ci sarà bisogno di creare diverse macchine virtuali che consumano le risorse del tuo sistema, ma sarà Docker a occuparsene. - Robustezza
Docker è molto meno esigente in termini di hardware e necessita di pochissima memoria rispetto alle macchine virtuali, fornendo quindi livelli di isolamento efficienti che aiutano a risparmiare non solo i costi ma anche il tempo.
Più efficienze, meno costi
I container Docker vengono avviati come eseguibili e, a differenza della virtualizzazione che occupa una parte significativa delle risorse di sistema, un container è proprio come un’altra applicazione eseguibile che fornisce un livello simile alla virtualizzazione, ma in un modo efficiente in termini di risorse e più sicuro. Proprio perché i container Docker condividono le stesse risorse di sistema, questo li rende efficienti; ad esempio, in un sistema in cui è necessario eseguire diverse applicazioni, è possibile avere diversi container Docker avendo comunque un certo livello di isolamento che di solito si ottiene utilizzando diverse macchine virtuali.
Uno degli aspetti più importanti dell’isolamento del container è che ogni container interagisce con il proprio filesystem privato; questo filesystem è fornito da un’immagine Docker. Ciò significa essenzialmente la necessità di meno risorse e, a sua volta, un minor costo.
Bene, ma che cos’è un’immagine?
Non è quello che pensi che sia; è sicuramente più simile al cartamodello di un abito. Puoi creare i tuoi container a partire da un’immagine proprio come è possibile copiare il cartamodello usando una fotocopiatrice. Un’immagine infatti non è altro che un modello contenente un’applicazione, così come tutte le sue dipendenze, il materiale di cui ha bisogno per eseguire la tua applicazione come il tuo codice, librerie, file di configurazione, variabili d’ambiente (ex-PATH) eccetera.
Questa immagine può essere distribuita in diversi ambienti e fornita a diversi sistemi. Una volta che abbiamo il cartamodello di base, possiamo modificarlo, cambiare le misure, scegliere la stoffa e via dicendo. Quando iniziamo a cucire il vestito sulla base del modello scelto e completiamo l’opera, a quel punto avremo ottenuto un container. Esatto: un container è un’istanza in esecuzione di un’immagine.
Perché usare Docker?
Potresti voler utilizzare Docker se hai bisogno di una distribuzione rapida e coerente della tua applicazione. Principalmente, gli ingegneri del software, gli ingegneri DevOps e molti altri professionisti nel settore IT possono trarre vantaggio da Docker: semplifica il ciclo di vita dello sviluppo del software consentendo agli sviluppatori di lavorare in ambienti standardizzati che funzionano a meraviglia per flussi di lavoro di integrazione continua e distribuzione continua.
Per saperne di più, leggi il mio libro: attraverso casi d’uso reali, vedrai quando è bene (e quando non lo è) usare Docker per portare avanti il tuo progetto.
Immagine di apertura di Daniel von Appen su Unsplash.
L'autore
Corsi che potrebbero interessarti
Machine Learning & Big Data per tutti
Comunicazione digitale Food & Wine - Iniziare Bene