Containerizzazione
Sfondo nero e blu
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.

La containerizzazione  è la creazione di un package 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 contenitore - che viene eseguito in modo coerente su qualsiasi infrastruttura. Più portatile ed efficiente in termini di risorse rispetto alle  macchine virtuali (virtual machine, VM), i container sono diventati  di fatto le unità  di calcolo  delle applicazioni  native del cloud  moderne.

La containerizzazione consente agli sviluppatori di creare e distribuire applicazioni in modo più rapido e sicuro. Con i metodi tradizionali, il codice viene sviluppato in un ambiente di elaborazione specifico che, una volta trasferito in una nuova sede, comporta spesso bug ed errori. Ad esempio, quando uno sviluppatore trasferisce il codice da un computer desktop a una VM (virtual machine) o da un sistema operativo Linux a Windows. La containerizzazione elimina questo problema raggruppando il codice di applicazione assieme ai file di configurazione correlati, alle librerie e alle dipendenze necessarie per l'esecuzione. Questo singolo pacchetto di software o "contenitore" è indipendente dal sistema operativo host e quindi è autonomo e portatile, 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 contenitori con semplici strumenti per gli sviluppatori ed un approccio universale alla creazione di pacchetti — 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 recente sondaggio IBM  (PDF, 1,4 MB), il 61% di coloro che adottano i contenitori ha riferito di utilizzare i contenitori nel 50% e oltre delle nuove applicazioni create nel corso dei due anni precedenti; il 64% degli utilizzatori si aspettava che il 50% e oltre delle applicazioni esistenti fosse inserito in contenitori durante i due anni successivi.

I contenitori 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 contenitori sono intrinsecamente più piccoli in termini di capacità, rispetto a una VM e richiedono tempi di avviamento inferiori, consentendo di eseguire più contenitori 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, impedisce i vincoli imposti dal fornitore del cloud e offre altri notevoli vantaggi, come  isolamento degli errori, facilità di gestione, sicurezza semplificata e altro ancora (vedere di seguito).

Per informazioni più approfondite, guarda questo video - "Informazioni sulla Containerizzazione":

Container nelle aziende: una nuova ricerca IBM documenta un momento di grande espansione di container e Kubernetes.

Leggi l'e-book (1,4 MB)


Containerizzazione delle applicazioni

I contenitori incapsulano un'applicazione come un unico pacchetto eseguibile di software che integra il codice delle applicazioni insieme a tutti i file di configurazione correlati, le librerie e le dipendenze necessarie per l'esecuzione. Le applicazioni containerizzate sono "isolate" in quanto non vengono integrate in 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 contenitori di condividere un sistema operativo con altri contenitori sullo stesso sistema di elaborazione.

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

L'astrazione dal sistema operativo host rende portatili le applicazioni containerizzate e offre la possibilità di eseguirle in modo uniforme e coerente su qualsiasi piattaforma o cloud. I contenitori possono essere facilmente trasportati da un computer desktop a una macchina virtuale (VM) o da un sistema operativo Linux a 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 preferiti.

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 monolite tradizionale (un'applicazione software a singolo livello) o un microservizio modulare (una raccolta di servizi accoppiati liberamente). 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 contenitori (o microservizi containerizzati) che utilizzano le risorse di elaborazione in modo più efficiente.

Combina le migliori caratteristiche del cloud e dell'IT tradizionale - I contenitori sono la chiave per una strategia di cloud ibrido che consente di creare e gestire i carichi di lavoro da qualsiasi luogo, senza vincoli del fornitore.

Ulteriori informazioni


Vantaggi in dettaglio

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

  • Portabilità:  Un contenitore crea un pacchetto eseguibile di software che viene astratto dal (non collegato o dipendente) sistema operativo host e quindi è portatile e in grado di essere eseguito in modo uniforme e coerente su qualsiasi piattaforma o cloud. 
  • Agilità:  Il motore open source Docker per l'esecuzione dei contenitori ha avviato lo standard di settore per i contenitori con semplici strumenti per gli sviluppatori e un approccio universale alla creazione di pacchetti compatibile con i sistemi operativi Linux e Windows. L'ecosistema del contenitore si è spostato ai motori gestiti dall'Open Container Initiative (OCI). Gli sviluppatori di software possono continuare a utilizzare i processi e gli strumenti agili o DevOps per un rapido sviluppo e potenziamento delle applicazioni.
  • Velocità:  I contenitori sono spesso indicati come "leggeri", cioè condividono il kernel del sistema operativo della macchina e non sono appesantiti da sovraccarichi aggiuntivi. In questo modo è possibile non solo aumentare l'efficienza dei server, ma anche ridurre i costi dei server e delle licenze, velocizzando i tempi di avvio, in quanto non è presente alcun sistema operativo da avviare.
  • Isolamento dei malfunzionamenti:  Ciascuna applicazione containerizzata è isolata e funziona in modo indipendente dalle altre. Il guasto di un contenitore non influisce sulla continua operatività degli altri contenitori. I team di sviluppo possono identificare e correggere eventuali problematiche tecniche all'interno di un contenitore, senza tempi di inattività degli altri contenitori. Inoltre, il motore del contenitore può sfruttare le tecniche di isolamento della sicurezza del sistema operativo, come il controllo degli accessi SELinux, per isolare i malfunzionamenti all'interno dei contenitori.
  • Efficienza:  Il software eseguito in ambienti containerizzati condivide il kernel del sistema operativo della macchina e i livelli dell'applicazione all'interno di un contenitore possono essere condivisi tra i contenitori. Così, i contenitori sono intrinsecamente più piccoli in termini di capacità rispetto a una VM e richiedono tempo di avviamento inferiori, consentendo di eseguire più contenitori 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 del contenitore automatizza l'installazione, la scalabilità e la gestione dei servizi e dei carichi di lavoro containerizzati. Le piattaforme di orchestrazione dei contenitori possono semplificare le attività di gestione, come la scalabilità delle app containerizzate, la distribuzione delle nuove versioni di app e la fornitura di funzioni quali monitoraggio, registrazione e debug. Kubernetes, forse il più diffuso sistema di orchestrazione dei contenitori disponibile, è una tecnologia open source (originariamente open source di Google, basata su un progetto interno chiamato Borg) che automatizza le funzioni del contenitore di Linux in origine. Kubernetes è compatibile con molti motori di contenitori, come Docker, ma funziona anche con qualsiasi sistema di contenitore conforme agli standard OCI (Open Container Initiative) per i formati di immagine del contenitore e i runtime.
  • Sicurezza:  L'isolamento delle applicazioni come contenitori impedisce per natura che l'intrusione di codice dannoso colpisca altri contenitori o il sistema host. È inoltre possibile definire le autorizzazioni di sicurezza per bloccare automaticamente l'accesso ai contenitori da parte di componenti indesiderati o per limitare le comunicazioni con le risorse non necessarie.
Prodotti in evidenza

Red Hat OpenShift on IBM Cloud

IBM Cloud Satellite


Tipi di containerizzazione

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

Oggi Docker è una delle tecnologie di motore dei contenitori più famosa e utilizzata, ma non è l'unica possibilità disponibile. L'ecosistema sta standardizzando i contenitori e altre alternative come CoreOS rkt, Mesos Containerizer, LXC Linux Containers, OpenVZ e crio-d. Le funzioni e le impostazioni predefinite possono differire, ma adottando e utilizzando le specifiche OCI in base alla loro evoluzione, sarà possibile garantire soluzioni indipendenti dal fornitore, certificate per funzionare su più sistemi operativi e utilizzabili in più ambienti.


Microservizi e containerizzazione

Le aziende software grandi e piccole stanno utilizzando i microservizi come un approccio superiore allo sviluppo e alla gestione delle applicazioni, rispetto al precedente modello monolitico che unisce 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é entrambi sono procedure di sviluppo software che trasformano essenzialmente le applicazioni in raccolte di servizi o componenti più piccoli, portatili, scalabili, efficienti e più facili da gestire.

Inoltre, i microservizi e la containerizzazione si integrano alla perfezione se utilizzati insieme. I contenitori forniscono un incapsulamento leggero di qualsiasi applicazione, che si tratti di un monolite tradizionale o di un microservizio modulare. Un microservizio, sviluppato in un contenitore, acquisisce quindi tutti i vantaggi intrinsechi della containerizzazione - portabilità in termini di processo di sviluppo e compatibilità del fornitore (nessun vincolo del fornitore), nonché agilità dello sviluppatore, 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, permettendo ai membri dei team di lavorare in remoto e in viaggio. I provider dei servizio cloud (CSP) gestiscono l'infrastruttura sottostante, che riduce i costi dei server delle organizzazioni e di altre apparecchiature e fornisce inoltre backup di rete automatizzati per una maggiore affidabilità. Le infrastrutture cloud scalano su richiesta e possono adattare dinamicamente le risorse di elaborazione, 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.

Contenitori, microservizi e cloud computing si integrano per fornire nuovi livelli di sviluppo e distribuzione delle applicazioni, impossibili con metodologie e ambienti tradizionali. Questi approcci di nuova 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.

Per un approfondimento sui microservizi, guarda "Cosa sono i microservizi?":


Sicurezza

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

Ma che dire dell'immagine stessa del contenitore? In che modo le applicazioni e i componenti open source integrati in un contenitore migliorano la sicurezza? I fornitori della tecnologia dei contenitori, come Docker, continuano ad affrontare attivamente le sfide di sicurezza dei contenitori. 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 del contenitore 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 contenitori da parte di componenti indesiderati o per limitare le comunicazioni con le risorse inutili.

Ad esempio, Linux Namespaces consente di fornire una vista isolata del sistema a ogni contenitore; ciò include la rete, i punti di montaggio, gli ID dei processi, gli ID utente, la comunicazione 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 di ogni contenitore. In genere, non è possibile accedere ai sottosistemi che non dispongono del supporto Namespace da un contenitore. 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 contenitori 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, in modo da garantire il flusso sicuro dei dati attraverso applicazioni, endpoint e così via.

Scopri una strategia per la scalabilità della sicurezza dei contenitori tra organizzazioni di qualsiasi dimensione.


Virtualizzazione e containerizzazione

I contenitori vengono spesso confrontati con le macchine virtuali (VM), poiché entrambe le tecnologie consentono di ottenere notevoli vantaggi in termini di efficienza elaborativa, permettendo di eseguire più tipi di software (basati su Linux o Windows) in un unico ambiente. Tuttavia, la tecnologia dei contenitori 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 (OS), vengono forniti insieme 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 risorse di elaborazione in modo ancora più efficiente. Un contenitore crea un unico pacchetto eseguibile di software che integra il codice delle applicazioni insieme a tutti i file di configurazione correlati, le librerie e le dipendenze necessarie per l'esecuzione. A differenza delle VM, tuttavia, i contenitori non vengono integrati in una copia del sistema operativo. Il motore di runtime del contenitore viene invece installato sul sistema operativo del sistema host, diventando il condotto attraverso il quale tutti i contenitori sul sistema di elaborazione condividono lo stesso sistema operativo.

Come detto, i contenitori 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 contenitore (bin e librerie comuni) possono essere condivisi tra più contenitori, rendendo i contenitori intrinsecamente più piccoli in termini di capacità e più veloci ad avviarsi rispetto a una VM. Più contenitori 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.


Containerizzazione e IBM Cloud

In poche parole, la virtualizzazione elimina l' esigenza di un intero server per una applicazione. La containerizzazione elimina la necessità di un intero sistema operativo per ogni applicazione. Portabilità, agilità, isolamento degli errori, facilità di gestione e sicurezza sono tra i vantaggi dell'utilizzo della tecnologia di containerizzazione.

Una piattaforma container aziendale fornisce orchestrazione su più cloud pubblici e privati, per unificare i tuoi ambienti e migliorare le prestazioni aziendali e operative. È un componente chiave di una strategia di cloud ibrido open che consente di evitare i vincoli imposti dal fornitore, creare ed eseguire carichi di lavoro ovunque con coerenza e ottimizzare e modernizzare tutti componenti del tuo IT.

Fai un passo avanti:

  • Implementa cluster Kubernetes completamente gestiti e ad elevata disponibilità con Red Hat OpenShift on IBM Cloud, un servizio OpenShift gestito che utilizza efficacemente la scalabilità e la sicurezza aziendale di IBM Cloud per automatizzare gli aggiornamenti, la scalabilità e il provisioning.
  • Implementa ed esegui app in ambienti on-premises, di edge computing e cloud pubblico di qualsiasi fornitore con IBM Cloud Satellite, una soluzione di cloud distribuito gestita
  • Semplifica e consolida i tuoi data lake distribuendo senza interruzione lo storage aziendale abilitato per i container in ambienti on-premise e di cloud pubblico con le soluzioni di storage su cloud ibrido di IBM
  • Semplifica la complessa gestione dell'IT ibrida con i servizi gestiti di IBM Cloud.

Inizia con un account IBM Cloud oggi stesso.


Soluzioni correlate

Ottimizza e modernizza tutto il tuo IT

Una strategia di cloud ibrido open source consente di creare e gestire i carichi di lavoro da qualsiasi ubicazione, senza vincoli imposti dal fornitore.


Red Hat OpenShift on IBM Cloud

Red Hat OpenShift on IBM Cloud™ utilizza OpenShift in ambienti pubblici e ibridi per una maggiore velocità, reattività al mercato, scalabilità e affidabilità.


IBM Cloud Satellite

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


Soluzioni di storage su cloud ibrido

Distribuisci lo storage aziendale abilitato per i contenitori in modo semplice e senza interruzioni su ambienti on-premises e di storage cloud con lo storage cloud ibrido.


Servizi cloud

Semplifica la complessa gestione dell'IT ibrido per una maggiore visibilità, gestibilità e flessibilità.