CODEMOTION MILANO 2016 – Docker Workshop

12-12-2016

Abbiamo partecipato al workshop “Docker: understand, use, orchestrate”. Ecco come è andata…

 

Dal 23 al 26 novembre abbiamo partecipato al Codemotion Milano 2016, uno tra gli appuntamenti di incontro tra esperti nel settore IT e Developement più importanti d’Italia. Anche se la proposta formativa dei workshop era diversificata ed ognuno di essi aveva molto da offrire, abbiamo deciso di partecipare al workshop tecnico su Docker. Vediamo più in dettaglio di cosa si è parlato.

 

Negli ultimi anni nel mondo della Information Technology la virtualizzazione ha avuto uno sviluppo preponderante in ambito Cloud e non solo, dove la possibilità di scalare su più nodi di calcolo è la funzionalità più ricercata.

Il mondo della virtualizzazione però in molti casi risulta appesantire molti processi di integrazione e sviluppo e minare le performance del sistema. Un esempio pratico potrebbe essere quello di un sistemista che deve istanziare e mantenere una cinquantina di macchine virtuali, tutte con caratteristiche applicative differenti. Parlando di virtualizzazione, una interazione del genere costerebbe allo stesso sistemista ore e ore di configurazioni, non potendo facilmente replicare una stessa macchina se non su un altra virtual machine.

Il progetto Docker parte dall’esigenza di facilitare i punti appena visti e implementare, sfruttando il sistema di containerizzazione già presente da tempo all’interno dei sistemi UNIX-based, la gestione dei containers, una soluzione più performante che garantisce un buon livello di isolamento applicativo e di risorse.

Ciò che nel mondo della virtualizzazione viene chiamato macchina virtuale, in Docker è un container, ed al suo interno è possibile configurare un intero sistema operativo, un pool di applicazioni, un singolo servizio, un server o una distribuzione applicativa, semplicemente descrivendone il contenuto.

 

 

La struttura dei container di Docker è estremamente granulare ed applicabile a molte architetture informative già esistenti ed assestate. Inoltre, la comodità di Docker è che può essere usato con qualsiasi sistema operativo: se non si ha a disposizione una piattaforma Linux, Docker mette a disposizione dei wrapper per lanciare il servizio all’interno di una distribuzione Linux minimale.

Non importa assolutamente il mezzo, il programma funziona ovunque, con la stessa metodologia ed in egual modo.

Di default, un container di Docker deve essere inizializzato e composto da una o più immagini di container già esistenti, ma nulla vieta naturalmente di crearsi le proprie immagini.

Supponendo di voler avviare un container con una determinata immagine, è necessario richiedere al demone Docker (Docker daemon) esattamente quell’immagine, ed esso si occuperà di istanziare un container come processo con le caratteristiche specificate. Docker daemon, se non si è in possesso dell’immagine in un repository locale contatta il registry (contenitore in rete di immagini standard, il default per Docker è Docker Hub) e scarica una copia dell’image mantenedola in una cache locale nel caso potesse servire per ulteriori istanze future.

Il container può essere avviato come si avvierebbe una VM, passando variabili di ambiente, effettuando il mapping di porte e così via.

La vera forza di Docker è che permette di sviluppare la propria architettura informativa in modo stratificato ed agile. Ad esempio, partendo da un’immagine CentOS, si possono creare due immagini che la usano come base: una con un web server Apache e una con un web server Nginx. Volendo replicare questi nodi nella stessa macchina, il processo richiederebbe il solo costo temporale di scaricamento dell’immagine di CentOS e dei pacchetti Apache ed Nginx, per poi inizializzare le istanze in qualche minuto. Le istanze potrebbero contenere tutte una versione di Apache ed Nginx differenti, in quanto le immagini scaricate permettono la scelta di versione in avvio di una nuova istanza del container.
Un sistema del genere permette di isolare le dipendenze gestendo così al meglio il proliferarsi delle versioni di librerie e software senza troppi grattacapi, il tutto con pochi e semplici comandi.
E questo ci porta a descrive un workflow tipico.

 

Quante volte avete sentito la tipica frase: “Eh, ma sulla mia macchina funzionava!”
Bene, con Docker mai più!
Prendiamo l’applicazione, isoliamone le dipendenze e mettiamola in un container, creando una nuova immagine. Partendo da qui, l’immagine può essere distribuita a tutti gli sviluppatori che interverranno nel progetto, assicurandosi che ogni persona coinvolta avrà esattamente la stessa installazione applicativa, come potrà essere ugualmente replicata in fase di stage e produzione.

In questo modo, le applicazioni possono essere facilmente spostate in modo più economico e veloce, evitando problemi causati dalle caratteristiche delle piattaforme o dalle restrizioni dei singoli provider. In definitiva, Docker costa sicuramente meno, in termini economici e di risorse, rispetto a soluzioni di virtualizzazione più tradizionali.