[gl-como] Docker per stupidini

Luca Lesinigo luca@lesinigo.it
Gio 4 Feb 2016 10:58:28 CET


Il giorno 04 feb 2016, alle ore 10:39, Lorenzo Lobba <lorenzo.lobba@gmail.com> ha scritto:
> A parte "hello, world!" non l'ho mai usato.
> Alcuni miei ex- colleghi lo usavanno per installare velocemente la toolchain e l'ambiente necessari per i progetti su cui lavorare senza andare ad interferire con i programmi, le librerie e le configurazione del sistema host. (A volte bisogna fare i numeri per far convivere sullo stesso sistema librerie e programmi in più versioni da usare a seconda del caso)
Su questo specifico caso, cioè ambienti locali per sviluppo, mi sento di stra-consigliare Vagrant: da quando lo uso sto molto meglio :)
Lavora con virtual machine tradizionali (tipicamente VirtualBox), ma è estremamente comodo e soprattutto è multiplatform. Basta un semplice file di testo nella root del progetto (che tipicamente avrete sotto version control, git o similari) e tutti gli sviluppatori coinvolti avranno la possibilità di usare lo stesso esatto identico ambiente di test, ma ognuno comodamente sul proprio pc, a prescindere dal sistema operativo host (Linux / Mac / Windblows).

Di solito questo tipo di vm non richiede grandi risorse (il default in Vagrant è crearle con 0.5GB di ram e raramente ho avuto bisogno di modificarlo), un qualsiasi host con 4GB di ram ne può far girare anche più di una contemporaneamente (cosa che, a seconda di come vi organizzate il lavoro, solitamente non è necessaria). Sul mio notebook carrozzato-ma-non-troppo (Core i5 epoca 2014, 8GB, ssd) mi è capitato di dare dei “vagrant up” su progetti composti da due o tre vm linux separate, e magari intanto avere anche una vm in più “manuale” in esecuzione, ma non è che vada in crisi più di tanto.

> Una macchina virtuale (MV) richiede molte risorse e su un computer, che non sia un server corazzato, non si possono far girare più di due MV. (Ci sono trucchi per ridurre la quantità di risorse necessarie.... ma è necessaria una buona conoscenza delle MV)
Vagrant, alla fine, è solo un “frontend” che semplifica ed automatizza diverse cose: trovare e scaricare da internet la base image della VM (che Vagrant chiama “box”), clonarla per creare una o più nuove VM (copy on write, sui VirtualBox recenti!), automatizzare la parte di networking e port forwarding, automatizzare la creazione di un’utenza con chiave ssh, automatizzare il lancio di script di provisioning, automatizzare la condivisione della directory di progetto tra host e guest. Il bello è che non ti serve quasi nessuna buona conoscenza tecnica e comunque in un team il Vagrantfile (e script di contorno) possono essere predisposti da chi ne ha competenza e poi facilmente riutilizzati da chiunque.

Per tornare on-topic, il caso d’uso di Vagrant è estremamente diverso da quello di Docker: il primo non si pone neanche il dubbio di essere usato su sistemi “server” o di ottimizzare prestazioni e consumo di risorse, è spiccatamente orientato alla postazione di lavoro di una persona con l’uso di virtual machine usa-e-getta. Quando finisci un task di lavoro e passi a qualcos’altro, distruggi la vm. Quando stacchi la sera e vai a casa, distruggi la vm. Eccetera.
Il secondo invece è spiccatamente orientato al deploy su server (che siano di test o produzione non c’entra) di applicazioni containerizzate, insieme alla loro configurazione o strumenti per ottenerla esternamente (i container dovrebbero sempre essere immutabili: non si aggiornano né si riconfigurano).


--
Luca Lesinigo



Maggiori informazioni sulla lista gl-como