Docker container VS. VMWare
L'avvento di VMWare ha permesso di cambiare radicalmente la struttura fisica delle sale server in giro per il mondo. Erano per lo più popolate da server sovra-dimesionati e "mono-funzionali" : database server, l'application server separati, magari in cluster, e intorno una miriade di server più o meno grandi ognuno dedicato ad una funzione : il server per le telecamere e la video sorveglianza, FTP server, application server di sviluppo e pre-produzione e così via. Insomma, soldi spesi, spazio occupato, poca ottimizzazione dell'uso delle risorse, CPU spesso sottoutilizzate, banchi di RAM comparti e installati perchè "non si sa mai, il server potrebbe averne bisogno" ... per non parlare della corrente per tenere acceso tutto, impianti di climatizzazione per tenere fresco tutto e CO2 a palla. Un bel quadretto, non solo elettrico.
Poi venne VMWare
VMWare ha risolto moltissimi problemi. Ha permesso di installare su un singolo "ferro" (server hardware) più applicazioni e sistemi software in genere. Finalmente non era più necessario acquistare un nuovo server fisico tutte le volte che nasceva una nuova esigenza applicativa. Inoltre era diventato possibile concedere RAM o CPU aggiuntive a server applicativi virtualizzati esistenti, oppure toglierli o modularli meglio su altre macchine virtuali nate sovradimensionate. VMWare ha permesso di sfruttare al meglio i ferri presenti nelle aziende, risparmiando tempo e un sacco di soldi. Tutto perfetto quindi? Non proprio.
Bello ma non troppo
Il problema di VMWare è che ogni macchina virtuale ha bisogno di un suo sistema operativo, quindi CPU e RAM per farlo girare, spazio su disco, qualcuno che lo monitori, che applichi patch, lo aggiorni e in qualche caso serve pure una licenza ufficiale. Tutte rirsorse hardware, umane e finanziarie che potrebbero essere usate meglio. A questo possiamo aggiungere che le macchine virtuali (VMs) non sono velocissime nello startup e migrarle da un hypervisor all'altro non è detto sia una passeggiata di salute.
E vennero in container!
Google ma non solo, anche Microsoft e il mondo Linux, da anni cercano una soluzione ai limiti del mondo delle macchine virtuali. E' da queste ricerche che è nato il concetto di container. In questo modello architetturale, un container è molto simile ad una macchina virtuale che però non ha bisogno di un sistema operativo dedicato. I container sono veloci nello startup e sono ultra-portabili.
I container moderni nascono nell'ecosistema Linux, con sforzi enormi da parte di una grande avrietà di persone e società impegnate in prima linea, come Google, che hanno contribuito allo sviluppo di molte tecnolgie poi confluite nei container. Una di queste tecnologie è il nostro Docker, tecnicamente un "container runtime". E' stato proprio Docker a rendere i container accessibili a tutti, una tecnologia complessa e rivoluzionaria a disposizione delle masse.
Anche Microsoft ha percorso la via dei container, da anni, e li troviamo a disposizione in Windows 10 e Windows Server 2016. Lo strato software che si interpone tra i Windows Container e l'utente è di nuovo Docker, questo rende l'esperianza d'uso dei container nel mondo Windows molto simile a quella nel mondo Linux.
Container Windows e container Linux
I container condividono il kernel del sistema operativo con la macchina (fisica) ospite. Questo significa che una qualsiasi applicazione containerizzata destinata a Linux, non può girare come container su una macchina Windows. E viceversa. Su questo limite la tecnologia è comunque in evoluzione, ed è già possibile in alcuni casi eseguire container Linux su Windows.