Cos'è la containerizzazione?
Scopri la storia della tecnologia di containerizzazione, i vantaggi e i benefici dell'utilizzo di questa tecnologia e come è correlata alla virtualizzazione.
Sfondo nero e blu
Cos'è la containerizzazione?

La containerizzazione consiste nell'impacchettamento di codice software che contiene solo le librerie del sistema operativo e le dipendenze necessarie per eseguire il codice per creare un unico eseguibile leggero - chiamato container - che viene eseguito in modo coerente su qualsiasi infrastruttura. Più portabili ed efficienti in termini di risorse rispetto alle VM  (virtual machine), i container sono diventati di fatto le unità di calcolo delle applicazioni native del cloud moderne.

La containerizzazione consente agli sviluppatori di creare e implementare applicazioni in modo più rapido e sicuro. Con i metodi tradizionali, il codice viene sviluppato in un ambiente di calcolo specifico che, una volta trasferito in una nuova sede, comporta spesso bug ed errori. Un esempio può essere quando uno sviluppatore trasferisce il codice da un computer desktop a una VM o da un sistema operativo Linux a uno Windows. La containerizzazione elimina questo problema raggruppando il codice applicativo assieme ai file di configurazione, alle librerie e alle dipendenze correlati necessari per l'esecuzione. Questo singolo pacchetto di software o "container" è separato dal sistema operativo host e quindi è autonomo e portabile, in modo da poter essere eseguito su qualsiasi piattaforma o cloud, senza problemi.

Il concetto di containerizzazione e di isolamento dei processi è vecchio di decenni, ma l'avvento nel 2013 del Docker  Engine open source - uno standard di settore per i container con semplici strumenti per gli sviluppatori ed un approccio universale all'impacchettamento - ha accelerato l'adozione di questa tecnologia. Oggi le organizzazioni utilizzano sempre più la containerizzazione per creare nuove applicazioni e per modernizzare le applicazioni esistenti per il cloud. In un sondaggio di IBM (PDF, 1,4 MB), il 61% di coloro che adottano i container ha riferito di utilizzare i container nel 50% e oltre delle nuove applicazioni create nel corso dei due anni precedenti; il 64% prevede che il 50% e oltre delle applicazioni esistenti verrà inserito in container durante i prossimi due anni.

I container sono spesso indicati come "leggeri", cioè condividono il kernel del sistema operativo della macchina e non richiedono il sovraccarico dell'associazione di un sistema operativo in ogni applicazione. I container sono intrinsecamente più piccoli in termini di capacità, rispetto a una VM e richiedono tempi di avviamento inferiori, consentendo di eseguire più container con la stessa capacità di calcolo di una singola VM. Ciò consente di aumentare l'efficienza dei server e quindi di ridurre i costi dei server e delle licenze.

Forse ancora più importante, la containerizzazione consente alle applicazioni di essere "scritte una volta ed essere eseguite ovunque". Questa portabilità velocizza lo sviluppo, evita vincoli a specifici fornitori di servizi cloud e offre altri notevoli vantaggi, come isolamento degli errori, facilità di gestione, sicurezza semplificata e altro ancora (vedi di seguito).

Containerizzazione delle applicazioni

I container incapsulano un'applicazione come un unico pacchetto eseguibile di software che integra il codice applicativo insieme a tutti i file di configurazione, le librerie e le dipendenze correlati necessari per la sua esecuzione. Le applicazioni containerizzate sono "isolate" in quanto non integrano una copia del sistema operativo. Invece, un motore di runtime open source (come il motore di runtime Docker) è installato sul sistema operativo dell'host e diventa il condotto che consente ai container di condividere un sistema operativo con altri container sullo stesso sistema di calcolo.

Anche altri livelli del container, come bin e librerie comuni, possono essere condivisi tra più container. Così si elimina il sovraccarico di esecuzione di un sistema operativo all'interno di ogni applicazione e si riducono i container in termini di capacità, accelerando i tempi di avvio e favorendo l'efficienza dei server. L'isolamento delle applicazioni come container riduce inoltre la possibilità che il codice dannoso presente in un container incida su altri container o infetti il sistema host.

L'astrazione dal sistema operativo host rende portabili le applicazioni containerizzate e offre la possibilità di eseguirle in modo uniforme e coerente su qualsiasi piattaforma o cloud. I container possono essere facilmente trasportati da un computer desktop a una VM o da un sistema operativo Linux a uno Windows, assicurando l'esecuzione uniforme sulle infrastrutture virtualizzate o sui server "bare metal" tradizionali, installati on-premise o nel cloud. Ciò consente agli sviluppatori di software di continuare a utilizzare gli strumenti e i processi con cui hanno più dimestichezza.

Ecco perché le aziende stanno rapidamente adottando la containerizzazione come approccio superiore allo sviluppo e alla gestione delle applicazioni. La containerizzazione consente agli sviluppatori di creare e implementare le applicazioni in modo più veloce e sicuro, sia che l'applicazione sia un monolito tradizionale (un'applicazione software a singolo livello) o un'applicazione modulare basata su un'architettura di microservizi.  Le nuove applicazioni basate sul cloud possono essere progettate da zero come microservizi containerizzati, dividendo un'applicazione complessa in una serie di servizi specializzati e gestibili più piccoli. Le applicazioni esistenti possono essere riprogettate in container (o microservizi containerizzati) che utilizzano le risorse di calcolo in modo più efficiente.

Vantaggi della containerizzazione in dettaglio

La containerizzazione offre notevoli vantaggi agli sviluppatori e ai team di sviluppo. Tra questi vi sono:

Portabilità: un container crea un pacchetto eseguibile di software che viene astratto (non collegato o dipendente) dal sistema operativo host e quindi è portabile e può essere eseguito in modo uniforme e coerente su qualsiasi piattaforma o cloud. 

Agilità: il Docker Engine open source per l'esecuzione dei container ha dato il via allo standard di settore per i container con semplici strumenti per gli sviluppatori e un approccio di impacchettamento universale che funziona su entrambi i sistemi operativi Linux e Windows. L'ecosistema dei container si è spostato ai motori gestiti dall'Open Container Initiative (OCI). Gli sviluppatori di software possono continuare a utilizzare i processi e gli strumenti Agile o DevOps per un rapido sviluppo e potenziamento delle applicazioni.

Velocità: i container sono spesso indicati come "leggeri", cioè condividono il kernel del sistema operativo della macchina e non sono appesantiti da sovraccarichi aggiuntivi. Questo non solo aumenta l'efficienza del server, ma riduce anche i costi del server e delle licenze, accelerando i tempi di avvio poiché non è necessario avviare il sistema operativo.

Isolamento degli errori: ciascuna applicazione containerizzata è isolata e funziona in modo indipendente dalle altre. Il malfunzionamento di un container non si ripercuote sul funzionamento ininterrotto di qualsiasi altro container. I team di sviluppo possono identificare e correggere eventuali problematiche tecniche all'interno di un container, senza tempi di inattività degli altri container. Inoltre, il motore di container può sfruttare le tecniche di isolamento della sicurezza del sistema operativo, come il controllo degli accessi SELinux, per isolare i malfunzionamenti all'interno dei container.

Efficienza: il software eseguito in ambienti containerizzati condivide il kernel del sistema operativo della macchina e i livelli dell'applicazione all'interno di un container possono essere condivisi tra i container. Così, i container sono intrinsecamente più piccoli in termini di capacità rispetto a una VM e richiedono tempo di avviamento inferiori, consentendo di eseguire un numero molto più elevato di container con la stessa capacità di calcolo di una singola VM. Ciò consente di aumentare l'efficienza dei server, riducendo i costi dei server e delle licenze.

Facilità di gestione: una piattaforma di orchestrazione dei container automatizza l'installazione, la scalabilità e la gestione dei servizi e dei carichi di lavoro containerizzati. Le piattaforme di orchestrazione dei container possono semplificare le attività di gestione, come la scalabilità delle applicazioni containerizzate, la distribuzione delle nuove versioni di applicazioni e la fornitura di monitoraggio, registrazione e debug, tra le altre funzioni. Kubernetes, forse il più diffuso sistema di orchestrazione di container disponibile, è una tecnologia open source (originariamente open source di Google, basata su un progetto interno chiamato Borg) che automatizza le funzioni di container di Linux in origine. Kubernetes è compatibile con molti motori di container, come Docker, ma funziona anche con qualsiasi sistema di container conforme agli standard OCI (Open Container Initiative) per i formati di immagine del container e i runtime.

Sicurezza: l'isolamento delle applicazioni come container impedisce per sua natura che l'intrusione di codice dannoso colpisca altri container o il sistema host. È inoltre possibile definire le autorizzazioni di sicurezza in modo da bloccare automaticamente l'accesso ai container da parte di componenti indesiderati o per limitare le comunicazioni con le risorse non necessarie.

Tipi di containerizzazione

Il rapido aumento di interesse e utilizzo di soluzioni basate sui container ha portato all'esigenza di standard relativi alle tecnologia dei container ed all'approccio all'impacchettamento di codice software. La OCI (Open Container Initiative), avviata a giugno del 2015 da Docker e da altri leader del settore, sta promuovendo standard aperti, comuni e minimi, e specifiche per la tecnologia dei container. Per questo motivo, l'OCI sta contribuendo ad ampliare la scelta per i motori open source. Gli utenti non saranno vincolati alla tecnologia di uno specifico fornitore, ma potranno invece usufruire delle tecnologie certificate dall'OCI che consentono loro di sviluppare applicazioni containerizzate utilizzando un set eterogeneo di strumenti DevOps e di eseguirle in modo coerente sulle infrastrutture di loro scelta.

Oggi Docker è una delle tecnologie di motore di container più diffusa e utilizzata, ma non è la sola opzione disponibile. L'ecosistema sta eseguendo la standardizzazione su containerd e altre alternative come CoreOS rkt, Mesos Containerizer, LXC Linux Containers, OpenVZ e crio-d. Le funzioni e le impostazioni predefinite possono differire ma, l'adozione e l'utilizzo delle specifiche OCI man mano che si evolvono, garantirà che le soluzioni siano indipendenti dai fornitori, certificate per funzionare su più sistemi operativi e utilizzabili in più ambienti.

Microservizi e containerizzazione

Le aziende software grandi e piccole stanno adottando i microservizi come un approccio superiore allo sviluppo e alla gestione delle applicazioni, rispetto al precedente modello monolitico che combina un'applicazione software con l'interfaccia utente associata e il database sottostante in un'unica unità su una singola piattaforma server. Con i microservizi, un'applicazione complessa viene suddivisa in una serie di servizi più piccoli e specializzati, ognuno con il proprio database e la propria logica di business. I microservizi comunicano poi tra loro attraverso interfacce comuni (come le API) e le interfacce REST (come HTTP). Utilizzando i microservizi, i team di sviluppo possono concentrarsi sull'aggiornamento di aree specifiche di un'applicazione senza alcun impatto globale accelerando, di conseguenza, le fasi di sviluppo, test e implementazione.

I concetti alla base dei microservizi e della containerizzazione sono simili, poiché sono entrambe procedure di sviluppo software che trasformano essenzialmente le applicazioni in raccolte di servizi o componenti più piccoli, portabili, scalabili, efficienti e più facili da gestire.

Inoltre, i microservizi e la containerizzazione si integrano alla perfezione se utilizzati insieme. I container forniscono un incapsulamento leggero di qualsiasi applicazione, che si tratti di un monolito tradizionale o di un microservizio modulare. Un microservizio, sviluppato in un container, acquisisce quindi tutti i vantaggi intrinsechi della containerizzazione - portabilità in termini di processo di sviluppo e compatibilità dei fornitori (nessun vincolo a uno specifico fornitore), nonché agilità per gli sviluppatori, isolamento degli errori, efficienza dei server, automazione dell'installazione, scalabilità, gestione e livelli di sicurezza, tra gli altri.

Le comunicazioni attuali si stanno rapidamente spostando sul cloud, dove gli utenti possono sviluppare le applicazioni in modo rapido ed efficiente. Le applicazioni e i dati basati sul cloud sono accessibili praticamente da qualsiasi dispositivo connesso a Internet, consentendo ai membri dei team di lavorare in remoto e mentre si spostano. I provider di servizi cloud (CSP) gestiscono l'infrastruttura sottostante, che riduce i costi dei server e di altre apparecchiature delle organizzazioni e fornisce inoltre backup di rete automatizzati per una maggiore affidabilità. Le infrastrutture cloud scalano on-demand e possono adattare dinamicamente le risorse di calcolo, la capacità e le infrastrutture con il variare dei requisiti di carico. Inoltre, i CSP aggiornano regolarmente le offerte, offrendo agli utenti un accesso continuo alla tecnologia innovativa più recente.

Container, microservizi e cloud computing si integrano per fornire nuovi livelli di sviluppo e distribuzione delle applicazioni, impossibili con le metodologie e gli ambienti tradizionali. Questi approcci di prossima generazione aggiungono agilità, efficienza, affidabilità e sicurezza al ciclo di vita di sviluppo del software, assicurando una distribuzione più veloce delle applicazioni e miglioramenti per gli utenti finali e il mercato.

Sicurezza

Le applicazioni containerizzate dispongono per loro natura di un livello di sicurezza, poiché possono essere eseguite come processi isolati e in modo indipendente dagli altri container. Il massimo isolamento impedisce a qualsiasi codice pericoloso di danneggiare gli altri container o di invadere il sistema host. Tuttavia, i livelli di applicazioni all'interno di un container sono spesso condivisi tra i container. In termini di efficienza delle risorse, questo è un vantaggio, ma apre anche un varco a interferenze e violazioni della sicurezza attraverso i container. Lo stesso si potrebbe dire del sistema operativo condiviso, dato che più container possono essere associati allo stesso sistema operativo host. Le minacce di sicurezza al sistema operativo comune possono avere impatto su tutti i container associati e, viceversa, una violazione di un container può potenzialmente invadere il sistema operativo host.

Ma che dire dell'immagine del container stessa? In che modo le applicazioni e i componenti open source impacchettati in un container migliorano la sicurezza? I fornitori della tecnologia dei container, come Docker, continuano ad affrontare attivamente le sfide di sicurezza dei container. La containerizzazione ha adottato un approccio "sicuro per definizione", ritenendo che la sicurezza debba essere insita nella piattaforma e non una soluzione implementata e configurata separatamente. A tal fine, il motore di container supporta tutte le proprietà di isolamento predefinite inerenti al sistema operativo sottostante. È possibile definire le autorizzazioni di sicurezza in modo da bloccare automaticamente l'accesso ai container da parte di componenti indesiderati o per limitare le comunicazioni con le risorse inutili.

Ad esempio, gli spazi dei nomi Linux consentono di fornire una vista isolata del sistema a ogni container; ciò include la rete, i punti di montaggio, gli ID processo, gli ID utente, le comunicazioni tra i processi e le impostazioni del nome host. Gli spazi dei nomi possono essere utilizzati per limitare l'accesso a queste risorse, mediante i processi all'interno di ogni container. In genere, non è possibile accedere ai sottosistemi che non dispongono del supporto dello spazio dei nomi dall'interno di un container. Gli amministratori possono facilmente creare e gestire questi "vincoli di isolamento" su ogni applicazione containerizzata attraverso una semplice interfaccia utente.

I ricercatori stanno lavorando per rafforzare ulteriormente la sicurezza dei container ed è disponibile una vasta gamma di soluzioni di sicurezza per automatizzare il rilevamento delle minacce e le risposte delle aziende, per monitorare e rafforzare la conformità alle normative di settore e le politiche di sicurezza, per garantire il flusso sicuro dei dati attraverso applicazioni ed endpoint, e molto altro ancora.

Scopri una strategia per la scalabilità della sicurezza dei container nelle organizzazioni di qualsiasi dimensione.

Confronto tra virtualizzazione e containerizzazione

I container vengono spesso confrontati con le VM poiché entrambe le tecnologie permettono di ottenere notevoli vantaggi in termini di efficienza di calcolo, consentendo di eseguire più tipi di software (basati su Linux o Windows) in un unico ambiente. Tuttavia, la tecnologia dei container sta dimostrando di poter offrire vantaggi significativi oltre a quelli della virtualizzazione e sta rapidamente diventando la tecnologia preferita dai professionisti IT.

La tecnologia di virtualizzazione consente di eseguire più sistemi operativi e applicazioni software contemporaneamente e di condividere le risorse di un singolo computer fisico. Ad esempio, un'organizzazione IT può eseguire sia Windows che Linux o più versioni di un sistema operativo, insieme a più applicazioni sullo stesso server. Ogni applicazione e i relativi file, librerie e dipendenze, inclusa una copia del sistema operativo, vengono impacchettati come una VM. Con più VM in esecuzione su una singola macchina fisica, è possibile ottenere risparmi significativi in termini di costi di capitale, operativi ed energetici.

Per informazioni più dettagliate sulla virtualizzazione, guarda il video "Virtualizzazione nel 2019" e consulta "Virtualizzazione: una guida completa."

La containerizzazione, d'altra parte, utilizza le risorse di calcolo in modo ancora più efficiente. Un container crea un unico pacchetto eseguibile di software che integra il codice applicativo insieme a tutti i file di configurazione, le librerie e le dipendenze correlati necessari per la sua esecuzione. A differenza delle VM, tuttavia, i container non integrano una copia del sistema operativo. Il motore di runtime del container viene invece installato sul sistema operativo del sistema host, diventando il condotto attraverso il quale tutti i container sul sistema di elaborazione condividono lo stesso sistema operativo.

Come detto, i container sono spesso indicati come "leggeri", cioè condividono il kernel del sistema operativo della macchina e non richiedono il sovraccarico dell'associazione di un sistema operativo in ogni applicazione (come nel caso di una VM). Anche altri livelli del container (bin e librerie comuni) possono essere condivisi tra più container, rendendo i container intrinsecamente più piccoli in termini di capacità e più veloci ad avviarsi rispetto a una VM. Più container possono quindi essere eseguiti con la stessa capacità di calcolo di una singola VM, assicurando una maggiore efficienza dei server e riducendo ulteriormente i costi di server e licenze.

Soluzioni correlate
Red Hat OpenShift on IBM Cloud

Red Hat OpenShift on IBM Cloud si avvale di OpenShift in ambienti pubblici e ibridi per una maggiore velocità, reattività di mercato, scalabilità e affidabilità.

Esplora Red Hat OpenShift on IBM Cloud
IBM Cloud Satellite

Con IBM Cloud Satellite, puoi avviare servizi cloud coerenti ovunque, in ambienti on-premise, sull'edge e in ambienti di cloud pubblico.

Esplora IBM Cloud Satellite
IBM Cloud Code Engine

Esegui immagini di container, processi batch o codice sorgente come carichi di lavoro serverless - senza necessità di dimensionamento, distribuzione, rete o scalabilità.

Esplora IBM Cloud Code Engine
Risorse Containers in the enterprise

Una ricerca di IBM documenta il crescente slancio dell'adozione di container e Kubernetes.

Cos'è Docker?

Docker è una piattaforma open source per la creazione, l'implementazione e la gestione delle applicazioni containerizzate.

Cosa sono i microservizi?

In un'architettura di microservizi, ogni applicazione è composta da molti servizi più piccoli, accoppiati in modo lasco e distribuibili in modo indipendente.

Passa alla fase successiva

Red Hat OpenShift on IBM Cloud offre agli sviluppatori un modo rapido e sicuro per containerizzare e implementare i carichi di lavoro aziendali nei cluster Kubernetes.Delega attività noiose e ripetitive che coinvolgono la gestione della sicurezza, la gestione della conformità, la gestione dell'implementazione e la gestione continua del ciclo di vita.Poiché IBM gestisce OCP (OpenShift Container Platform), avrai più tempo per concentrarti sulle tue attività principali.

Esplora Red Hat OpenShift on IBM Cloud