Qualcuno di noi ne aveva sentito parlare mentre altri non sapevano di cosa si trattasse... una cosa è certa: non appena tutti ne abbiamo compreso il funzionamento, abbiamo subito capito che questo Docker avrebbe rivoluzionato il nostro modo di lavorare. 

“Docker è la rivoluzione!” 

Così è come ha esordito il nostro CTO saltando sulla sedia e richiamando l’attenzione di tutti gli sviluppatori presenti in ufficio.

Lo sviluppo web prima di Docker

Ognuno di noi - e ci riferiamo alla grande famiglia degli Sviluppatori Web - si è sicuramente trovato davanti alla necessità di avere conoscenze e competenze, seppur minime, in ambito sistemistico. 

Facciamo un esempio pratico, di modo da farvi capire veramente di cosa stiamo parlando: un nuovo cliente, titolare di un sito web esistente, ci chiede di apportare una semplice modifica. Dopo convenevoli e scartoffie, procediamo quindi con l’installazione del server web, del database e di tutte le altre componenti utili al funzionamento del software.

Poi qualcuno ha inventato XAMP (e tutte le sue varianti), una suite di pacchetti precostruiti che consentono di installare tutto in un solo colpo. Ma anche in questo caso è necessario configurare i singoli componenti: il virtual host, il database ecc.

Tutto questo va poi replicato su ogni macchina di sviluppo di ognuno degli sviluppatori che intervengono su questo software.

E non finisce qui… Se la vostra software house, web agency o ditta individuale ha collaborazioni attive con figure freelance, è possibile che vengano a crearsi problemi dovuti all’incompatibilità dei diversi sistemi operativi e/o environment utilizzati da ognuno degli sviluppatori: un software web che gira perfettamente su MAMP (Mac) può riscontrare problemi di compatibilità a girare su LAMP (Linux).

Infine, dopo tutta la fatica fatta per creare ambienti in cui tutti possano lavorare, arriva il momento del rilascio in produzione. Abbiamo il nostro codice pulito, ordinato e testato in tutte le sue parti, ma dobbiamo incrociare le dita affinché, al momento del deploy, non saltassero fuori quei “fantastici” avvisi o errori. 

Ma poi, tutto d’un tratto, la rivoluzione: le macchine virtuali.

Docker: che cos’è e chi dovrebbe usarlo?

Docker è un tool che rende pressoché banale tutto il processo di creazione, deploy e run di un’applicazione. Come? Beh, usando i container!

I container ci permettono di creare e distribuire un pacchetto che contenga tutte le parti necessarie al funzionamento di un’applicazione. 

Docker è comparabile ad una macchina virtuale, soltanto che, piuttosto che creare un intero sistema operativo virtuale, fa sì che le applicazioni utilizzino lo stesso kernel Linux su cui stanno runnando, con l’unica condizione che queste non abbiano installazioni e/o dipendenze sulle macchine host.

Un’altra interessante caratteristica di Docker è che si tratta di un software totalmente open source. Questo non solo rappresenta un boost gratuito che potete dare alle vostre software house, ma anche che ognuno di noi può contribuire aggiungendo features al pacchetto.

Veniamo al dunque: a chi conviene utilizzare Docker? 

Docker rispecchia quello che gli inglesi esprimono con il concetto di win-win situation, ovvero un qualcosa che porta benefici a tutte le figure coinvolte.

Lo sviluppatore, infatti, potrà mantenere il proprio focus sul codice senza dover sprecare giornate intere nel configurare ambienti per ogni cambio di contesto.

Allo stesso tempo, Docker rappresenta una sicurezza per la software house in almeno tre fasi:

  1. quando un nuovo sviluppatore entra a far parte del progetto (in pochi click, avrà tutto l’ambiente up and running);

  2. al momento del deploy in ambiente di staging;

  3. al momento del rilascio in produzione.

Le virtual machine

Le macchine virtuali (VMs) hanno rappresentato un passo avanti nella “containerizzazione” dei software. 

Sostanzialmente si tratta di avere “una macchina nella macchina”, una cosa che purtroppo porta con sé alcuni svantaggi:

  • Maggiore spazio disco utilizzato, in quanto è necessario installare da zero un nuovo sistema operativo;

  • Maggiore utilizzo, condiviso, delle risorse messe a disposizione dalla macchina fisica;

  • Difficoltà di sharing a causa dello spazio occupato.

Nonostante ciò, si ha comunque l’enorme vantaggio di avere il pacchetto - composto soltanto dai servizi necessari all’esecuzione del software in oggetto - racchiuso all’interno di un’unica macchina esportabile.

I benefici nell'utilizzo di Docker

Ecco quindi spuntare la parola magica servizi, uno dei concetti cardine sui cui si basa Docker.

Ogni servizio è racchiuso, appunto, da un contenitore che viene eseguito utilizzando direttamente le risorse della macchina fisica. I contenitori sono in grado di comunicare tra di loro (ad esempio, il server web può comunicare con il database), mantenendo però un elevato grado di isolamento.

Questa struttura ci porta quindi ad elencare i maggiori vantaggi che derivano dall’utilizzo di Docker, ovvero:

  • un utilizzo ottimizzato delle risorse necessarie allo sviluppo e al run dell’applicativo;

  • cicli di rilascio più rapidi e sicuri;

  • consente la portabilità delle applicazioni, velocizzando quindi tutti le “nuove installazioni”.

Perché anche IAMdev ha scelto di passare a Docker

Il nostro CTO aveva ragione: l’introduzione di Docker nel nostro workflow consente di descrivere i servizi di cui ha bisogno utilizzando il semplice file `docker-compose.yml` e disponendo quindi dello stesso ambiente di lavoro (plugin, dipendenze, servizi, etc.) in sviluppo, in staging, in produzione. Le piccole differenze sono “descrivibili” con il file di specializzazione `docker-compose.<env>.yml`.

Di seguito, i vantaggi che questo approccio ha apportato alla nostra software house:

  • ogni sviluppatore lavora nello stesso identico ambiente;

  • con un’unica riga da command line, i nostri sviluppatori eseguono cambi di contesto (in realtà i loro Mac) in meno di due minuti; 

  • non tutti i componenti del nostro team devono avere competenze sistemistiche: una volta installato Docker Engine, l’ambiente si configura automaticamente per iniziare a lavorare su qualsiasi progetto;

  • il rilascio in staging/produzione risulta semplificato, immediato e senza intoppi;

  • i costi di setup dei vari progetti sono totalmente abbattuti… felici noi, felice il cliente!