Questa mattina in ufficio un collega mi ha girato un documento. Un provider italiano sta aggiornando i suoi sistemi e, oltre agli SSD, sta implementando la virtualizzazione tramite Linux Container e Docker. Prendo spunto da questo evento per chiarire alcuni aspetti riguardo questa tecnologia di virtualizzazione.
Di che cosa stiamo parlando?
Virtualizzare un sistema, in parole povere, significa avere un programma in grado di eseguire un sistema operativo come se fosse un comune programma emulando schede di rete, video, audio, e software installate sopra. In sostanza significa dare la possibilità, ad esempio, agli utenti Windows, di utilizzare anche MacOS. La virtualizzazione è al vertice dei più radicali cambiamenti in termini di organizzazione delle risorse tecnologiche. Termini come PaaS (Platform as a Service) o SaaS (Software as a Service) trovano una realtà fertile all’interno della virtualizzazione. Ma andiamo per gradi: quello che vedete di seguito è un paragone dei due sistemi di virtualizzazione.
A sinistra c’è il metodo classico. Come potete notare alla base c’è un server fisico con un sistema operativo (Host OS) che ospita la macchina virtuale. All’interno di questo sistema operativo è installato un software per la virtualizzazione che consente di eseguire un sistema operativo virtualizzato (Guest OS) e di conseguenza le varie applicazioni installate all’interno (Bins/Libs-App).
A destra c’è il nuovo principio di virtualizzazione che, come notate, ha fatto sparire il GuestOS sostituendo l’Hypervisor (il software di virtualizzazione) con il Docker Engine.
È veramente un bene?
La rimozione del sistema operativo sicuramente aumenta le risorse prestazionali a disposizione dell’utente. Questo è ovvio. Tuttavia è chiaro che esiste una differenza tra un sistema operativo e un’applicazione. Il sistema operativo, in quanto a versatilità, interagisce attivamente con l’hypervisor per garantire un ambiente virtualizzato compatibile, personalizzabile nei minimi termini e benché esso possa al tempo stesso rappresentare un tallone di achille, è al contempo, un ecosistema in grado di essere più protetto rispetto un “contenitore” installato dentro Docker.
Di Docker si sente dire di tutto. Si stente dire che è indipendente dal sistema operativo ma questo non è esatto. C’è una compatibilità nativa con Linux ed una compatibilità raggiungibile con Windows e MacOS grazie a delle installazioni (il che fa presupporre che non sia effettivamente indipendente dai sistemi ospitanti).
Le applicazioni sono isolate l’una dall’altra ma non basta per renderle sicure perché, esattamente come per l’hypervisor, esse sono connesse con la macchina che li ospita. Sono quindi esposte a dei rischi che, per quanto bassi, esistono ed insistono. L’ecosistema che fa vivere i contenitori, però, è meno complesso del sistema operativo classico e benché questo comporti maggiore sicurezza da un lato, significa al tempo stesso minori possibilità di “implementare” personalizzazioni di security assessment. Sulle personalizzazioni poi bisogna fare una riflessione mirata. Prendiamo WordPress: esiste il pacchetto ufficiale, esiste il pacchetto di Bitnami, esiste il pacchetto di un utente russo, di uno americano, etc…
In sostanza: chi mi garantisce funzionalità e aggiornamenti costanti? Sicuramente la versione ufficiale è una garanzia ma spesso si possono trovare pacchetti non ufficiali con configurazioni più compatibili. Il pacchetto, però, può essere un problema perché può celare funzioni e codice malevolo.
Quello che è certo è che la soluzione è intrigante per la semplicità di preparazione e rilascio dei pacchetti. Nel registro online di Docker troverete software come WordPress, Joomla, BonitaCMS, accanto a prodotti come UBUNTU, Fedora, CentOS. Ogni pacchetto viene confezionato con un suo “ambiente operativo personalizzato”, di conseguenza WordPress che, ad esempio, ha un peso di 6.8 MB, dentro Docker viene rilasciato con un peso complessivo di 512 MB.
Capirete che non è cosa da poco quando, all’interno di Docker, dovrete virtualizzare più web-application e quindi più contenitori e stiamo parlando di applicazioni “senza dati”.
Docker è un sistema relativamente nuovo. La prima release è del 13 marzo 2013 (ecco perché ho detto relativamente). Il vero punto di forza di Docker è la gestione delle applicazioni:
- La velocità di rilascio di container è immediata.
- La loro gestione è semplice e intuitiva.
- La customizzazione è alta.
Però il prodotto, a parere di chi scrive, è troppo embrionale. Non è nuova la condizione in cui si trovano molti utenti che, installato un pacchetto e configurato, esso smetta di funzionare per problemi di configurazione interna (e parliamo di pacchetti ufficiali, non di quelli fatti dagli utenti).
Resta ben inteso che il progetto è notevole e che, sicuramente, avrà sviluppi e integrazioni sempre più interessanti ma al momento le incertezze di funzionamento superano i reali vantaggi.