Docker. Cos’è, come funziona e quando usarlo

pittogramma Zerouno

Guida

Docker. Cos’è, come funziona e quando usarlo

Uno dei più noti sistemi open source per la gestione dei container, Docker rappresenta la tecnologia di sviluppo del software basata sui microservizi e il metodo DevOps. Rispetto alla virtualizzazione, offre dei vantaggi di portabilità, leggerezza e risparmio che lo rendono particolarmente interessante soprattutto in un mercato come quello odierno, caratterizzato da un’esigenza diffusa di flessibilità e da una richiesta di tempistiche brevi nel rilascio delle soluzioni

04 Feb 2020

di Carmelo Greco

Quando si parla di una delle tecnologie più innovative nell’ambito del cloud computing, cioè dei container, che corrispondono a quel complesso di dati che occorrono a un’applicazione cloud nativa per essere eseguita, il riferimento a Docker è d’obbligo. Docker, infatti, rappresenta il software open source per la containerizzazione in ambiente Linux, ma non solo, forse più noto a livello mondiale. Con lo stesso nome vengono indicati sia il progetto e la community impegnata nel miglioramento costante della soluzione, sia la società Docker Inc., comprata nel novembre 2019 da Mirantis Inc., azienda specializzata in servizi cloud B2B e nello sviluppo di Kubernetes e OpenStack. Un’acquisizione che segue, perciò, una logica ben precisa, visto che Kubernetes è la piattaforma di orchestrazione di container per antonomasia e OpenStack è un’infrastruttura cloud “container friendly”, sebbene non sia l’unica.

Containerizzazione, microservizi e DevOps

Per comprendere il funzionamento di Docker, è opportuno fare una premessa. La containerizzazione è un approccio moderno nello sviluppo e nel rilascio del software basato sui microservizi e su un metodo come il DevOps che si ispira a un insieme di processi e strumenti “lean”. In sostanza, è il contrario della pratica monolitica del passato che prevedeva una sola unità di deployment per un’intera applicazione, con l’inconveniente che, dover apportare anche una piccola modifica, costringeva a rimettere mano a tutto il software. Invece, l’architettura granulare dei microservizi, ciascuno dei quali è incapsulato in un container, permette agli sviluppatori di lavorare in contemporanea sulla singola componente di una struttura più ampia, anche adoperando tipologie di codice differente. Senza che questo, fra l’altro, pregiudichi la possibilità di comunicazione fra i vari elementi, giacché i microservizi dispongono allo scopo di interfacce di programmazione delle applicazioni o API (Application Programming Interface). Il risultato è una maggiore agilità nello sviluppo e nel rilascio delle applicazioni, con un conseguente accorciamento del time to market e una maggiore aderenza al contesto attuale di mercato che chiede flessibilità e risposte immediate.

Docker e virtualizzazione a confronto

Docker si inserisce in questa tendenza a semplificare il ciclo di vita del software, isolando processi e applicazioni così che la loro esecuzione indipendente sia in grado di ottimizzare le risorse dell’infrastruttura. In tal senso si pone in continuità, migliorandolo, con il paradigma SOA (Service-Oriented Architecture), una metodologia di scomposizione alternativa allo sviluppo monoblocco che ha anticipato l’avvento dei microservizi. Rispetto alla SOA e ad altre modalità di sviluppo, la novità che porta Docker si concentra in particolare nell’affrancamento dalla virtualizzazione come standard univoco di testing e deployment. Basti pensare che all’epoca del suo rilascio, avvenuto nel marzo 2013, veniva spesso equiparato agli hypervisor delle macchine virtuali (VM), di cui condivide diversi benefici, ma non i relativi costi. Il paragone era dovuto probabilmente anche al fatto che per il primo anno Docker utilizzò un ambiente di virtualizzazione leggera a container come LXC, per poi abbandonarlo nel 2014 a favore della propria libreria scritta in linguaggio Go. Ma l’affinità, almeno dal punto di vista concettuale, è rimasta. Tanto che non è raro imbattersi ancora oggi in articoli e post che spiegano perché Docker non vada confuso con un sistema di virtualizzazione dell’hardware.

Portabilità e leggerezza, i vantaggi del download di Docker

Oltre a discostarsi dal meccanismo di astrazione tipico delle VM, superando i suoi potenziali sprechi di risorse di calcolo, il download di software Docker ha il duplice vantaggio della portabilità e della leggerezza. La portabilità deriva dal suo processo di distribuzione basato su file di immagine, un processo che facilita la condivisione delle applicazioni e dei servizi tra più ambienti. Ogni file di immagine è formato da livelli o layer, che si creano ogni qualvolta interviene una modifica. La stratificazione in layer abilita al rollback e al ripristino della versione precedente, velocizzando i processi di deployment continui. Se si mette a confronto questo meccanismo con la difficoltà e i rischi che comporta la migrazione di una macchina virtuale da un host all’altro, si capisce in che senso i container di Docker siano portabili. Per quanto riguarda la leggerezza, questa dipende dalla capacità dei container di sfruttare il kernel del sistema operativo, eliminando l’overhead richiesto per l’esecuzione di ogni singolo kernel. Da qui la possibilità della macchina fisica di ospitare tantissimi container. È anche vero che questo aspetto positivo convive con una maggiore vulnerabilità che si genera quando il kernel dell’host viene condiviso con i container, aumentando la base dell’esposizione a possibili attacchi. Una criticità non insormontabile, ma che necessita di policy di sicurezza integrate nel flusso dei container.

Sicurezza docker: le funzionalità del kernel Linux; namespace e cgroups, messe a disposizione anche da Windows

WHITEPAPER
DevOps: come implementare una strategia efficace. Scopri i vantaggi
Software
DevOps

In materia di sicurezza, Docker si avvale di una funzionalità propria di Linux, namespace. Ogni namespace è associato a un processo in esecuzione nel container e non può accedere ai namespace degli altri container, né a quelli della macchina ospitante. Questo garantisce l’opportuno isolamento tra container, ma non ne intacca la flessibilità che è governata mediante un altro strumento del kernel di Linux, i control groups (cgroups). Strutturati secondo una gerarchia ad albero, i cgroups consentono di gestire l’allocazione delle risorse in ciascun container e la lista dei processi eseguibili. In tal modo assolvono al compito che in un sistema virtualizzato viene svolto dall’hypervisor, che coordina la distribuzione delle risorse in ogni VM, oltre ad assicurare l’isolamento dall’host. Incarico, quest’ultimo, a cui invece nell’ambiente containerizzato provvede namespace, come si è detto prima.

Analoghe funzionalità sono messe a disposizione da Windows, tenendo presente che non è possibile eseguire container Linux direttamente sul kernel Windows e che quindi bisogna passare da Hyper-V o da Oracle VirtualBox.

Perché anche la versione a pagamento di Docker conviene

Oggi Docker è disponibile in due versioni, quella gratuita (CE, Community Edition) e quella a pagamento (EE Enterprise Edition). Quest’ultima, a sua volta, ha due canali di aggiornamento: Edge, che contempla release mensili; Stable, a cadenza quadrimestrale. Anche la versione a pagamento va ritenuta un buon investimento, se si considera che, in forza dell’automatizzazione del deployment, Docker abbatte drasticamente i tempi di configurazione e installazione. Secondo AWS, che offre soluzioni Docker attraverso il servizio Amazon Elastic Container Service (ECS), gli utenti Docker arrivano a distribuire software con una frequenza media 7 volte superiore. A questo si aggiunge il risparmio sui costi sia di personale sia di infrastruttura. Nel primo caso significa meno individui impegnati nello sviluppo di una sola applicazione, o comunque maggiore efficienza su progetti articolati e particolarmente complessi ai quali collaborano piccoli team correlati ai vari container. Sul versante dell’infrastruttura, il ricorso a Docker contribuisce all’ottimizzazione dei livelli di utilizzo dei server, visto che memoria e dischi possono essere meglio sfruttati tra diverse istanze. L’unico problema potrebbe scaturire dall’eccessiva proliferazione di container e di applicazioni containerizzate. Problema facilmente risolvibile con un sistema di orchestrazione dei container qual è per esempio Kubernetes.

Carmelo Greco

Giornalista

Giornalista professionista, si occupa come freelance e formatore di temi connessi all'innovazione digitale e alle trasformazioni del mercato del lavoro. Collabora alla collana “La bellezza dell'impresa” edita da Rubbettino ed è autore di opere teatrali e di narrativa.

Docker. Cos’è, come funziona e quando usarlo

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

    LinkedIn

    Twitter

    Whatsapp

    Facebook

    Link

    Articolo 1 di 4