Cosa sono i contenitori?

Professore universitario in una biblioteca mentre esamina le statistiche sugli studenti

Autori

Stephanie Susnjara

Staff Writer

IBM Think

Ian Smalley

Staff Editor

IBM Think

Cosa sono i contenitori?

I container sono unità eseguibili di software che creano pacchetti del codice dell'applicazione insieme alle relative librerie e dipendenze. Consentono l'esecuzione del codice in qualsiasi ambiente informatico, che si tratti di desktop, IT tradizionale o infrastruttura cloud.

I container utilizzano al meglio una forma di virtualizzazione del sistema operativo (SO) in cui le funzionalità kernel dell'SO (ad esempio, namespace e cgroup Linux, silo e job object di Windows) possono essere utilizzate per isolare i processi e controllare la quantità di CPU, memoria e disco a cui tali processi possono accedere.

Maggiore portabilità ed efficienza in termini di risorse rispetto alle macchine virtuali (VM), i container sono diventati di fatto le unità di computing delle moderne applicazioni cloud-native. Inoltre, i container sono fondamentali per l'infrastruttura IT sottostante alla base delle impostazioni del multicloud ibrido: la combinazione di cloud on-premise, privato, pubblico e più di un cloud service di diversi provider di cloud.

Secondo un rapporto di Business Research Insights1, il mercato globale delle tecnologie per container era valutato 496,4 milioni di dollari nel 2021 e dovrebbe raggiungere i 3123,42 milioni di dollari entro il 2031, con un tasso di crescita annuo composto (CAGR) del 19,8%.

Veduta aerea di uno snodo di autostrade

Rimani con la testa nel cloud 


Ricevi la newsletter settimanale Think per una guida esperta sull'ottimizzazione delle impostazioni multicloud nell'era dell'AI.

Container e macchine virtuali

Un modo per comprendere meglio un container consiste nell'esaminare come differisce da una tradizionale macchina virtuale (VM), che è una rappresentazione virtuale o un'emulazione di un computer fisico. Una macchina virtuale viene spesso definita ospite, mentre la macchina fisica su cui viene eseguita è chiamata host.

Le macchine virtuali sono rese possibili dalla tecnologia di virtualizzazione. Un hypervisor, un piccolo livello software, consente di assegnare risorse di elaborazione fisica (ad esempio, processori, memoria, storage) a ciascuna VM. Mantiene le VM separate l'una dall'altra, in modo che non interferiscano tra loro. Ogni macchina virtuale contiene quindi un sistema operativo guest e una copia virtuale dell'hardware necessario per l'esecuzione del sistema operativo, insieme a un'applicazione e alle relative librerie e dipendenze associate. VMware è stato uno dei primi a sviluppare e commercializzare tecnologie di virtualizzazione basate su hypervisor.

Invece di virtualizzare l'hardware sottostante, la tecnologia del container virtualizza il sistema operativo (in genere Linux) in modo che ogni container contenga solo l'applicazione e le sue librerie, i file di configurazione e le sue dipendenze. L'assenza del sistema operativo guest è il motivo per cui i container sono così leggeri e, quindi, più veloci e portatili rispetto alle VM.

Container e macchine virtuali non sono mutualmente esclusivi. Ad esempio, un'organizzazione potrebbe usare entrambe le tecnologie eseguendo i container nelle macchine virtuali per aumentare l'isolamento e la sicurezza e sfruttare così gli strumenti già installati per l'automazione, il backup e il monitoraggio.

Per maggiori informazioni su questo confronto, consulta "Containers versus VMs: What’s the difference?" e guarda il video:

Top benefits of containers

Il principale beneficio dei container, in particolare rispetto a una VM, è che offre un livello di astrazione che lo rende leggero e portatile. I benefici principali comprendono:

Leggero

Leggerezza: i container condividono il kernel del sistema operativo della macchina, eliminando la necessità di un'istanza completa del sistema operativo per ogni applicazione e rendendo i file dei container piccoli e poco dispendiosi in termini di risorse. Le dimensioni ridotte di un container, soprattutto rispetto a una macchina virtuale, significano che può funzionare rapidamente e supportare meglio le applicazioni cloud-native con scalabilità orizzontale.

Portatile e indipendente dalla piattaforma

I container portano con loro tutte le dipendenze, il che significa che il software può essere scritto una sola volta e quindi eseguito senza dover essere riconfigurato in ambienti di elaborazione (ad esempio laptop, cloud e on-premise).

A sostegno dello sviluppo e dell'architettura moderni

Grazie a una combinazione di portabilità e coerenza di implementazione su più piattaforme e grazie alle dimensioni ridotte, i container sono la soluzione ideale per lo sviluppo moderno e i modelli applicativi, come DevOps, serverless e microservizi, costruiti utilizzando implementazioni regolari di codice in piccoli incrementi.

Utilizzo migliorato

Come le macchine virtuali, i container consentono agli sviluppatori e agli operatori di migliorare l'utilizzo della CPU e della memoria dei computer fisici. I container vanno ancora oltre perché abilitano l'architettura dei microservizi in modo che i componenti applicativi possano essere implementati e scalati in modo più granulare. Si tratta di un'alternativa interessante al ridimensionamento di un'intera applicazione monolitica, in quanto un singolo componente è in difficoltà con il proprio carico.

Tempi di commercializzazione più rapidi

I container si affidano meno alle risorse di sistema, il che li rende più veloci da gestire e implementare rispetto alle macchine virtuali. Questa caratteristica ti aiuta a risparmiare denaro e tempo nell'implementazione delle applicazioni, ottimizzando al contempo il time to market.

In un sondaggio IBM, sviluppatori e dirigenti IT hanno riportato molti altri vantaggi dei container. Dai un'occhiata al report completo: Containers in the enterprise (i container nell'azienda).

Che cos'è la containerizzazione?

I container dipendono dalla containerizzazione, la creazione di pacchetti di codice software con solo il sistema operativo e le sue variabili di ambiente pertinenti, i file di configurazione, le librerie e le dipendenze del software.

Il risultato è l'immagine container che viene eseguita su una piattaforma container. Un'immagine container rappresenta dati binari che incapsulano un'applicazione e tutte le sue dipendenze software.

La containerizzazione consente alle applicazioni di essere "scritte una volta ed eseguite ovunque", garantendo portabilità, accelerando il processo di sviluppo, impedendo il blocco da fornitore di cloud e altro ancora.

L'evoluzione della containerizzazione

La containerizzazione e l'isolamento dei processi sono esistiti per decenni2. Il 1979 è stata una tappa storica nello sviluppo di container con lo sviluppo di chroot, parte del sistema operativo Unix versione 7. Chroot ha introdotto il concetto di isolamento dei processi limitando l'accesso ai file di un'applicazione a una directory specifica (root) e alle sue directory secondarie (o sottoprocessi).

Un'altra pietra miliare significativa si è verificata nel 2008, quando i container Linux (LXC) sono stati implementati nel kernel Linux, abilitando completamente la virtualizzazione per una singola istanza di Linux. Negli anni, tecnologie come FreeBSD jails e AIX Workload Partitions hanno offerto una virtualizzazione analoga a livello di sistema operativo.

Anche se LXC rimane un runtime noto e fa parte della distribuzione Linux e di un progetto indipendente dal provider3, sono disponibili delle tecnologie del kernel Linux più recenti. Anche Ubuntu, un moderno sistema operativo Linux open source, offre questa funzionalità.

Guarda il video per saperne di più sulla containerizzazione:

Docker e l’era dei moderni container

La maggior parte degli sviluppatori ritiene che il 2013 segni l'inizio dell'era moderna dei container con l'introduzione di Docker. Una piattaforma software di containerizzazione open source che funge da platform as a service (PaaS), Docker consente agli sviluppatori di creare, distribuire, eseguire, aggiornare e gestire i container.

Docker utilizza il kernel Linux (il componente base del sistema operativo) e le funzioni del kernel (come i gruppi e i namespace) per separare i processi in modo che possano essere eseguiti in modo indipendente. Docker fondamentalmente prende un'applicazione e le sue dipendenze e le trasforma in un container virtuale che può essere eseguito su qualsiasi sistema informatico Windows, macOS o Linux.

Docker si basa su un'architettura client-server, con Docker Engine che ha funzione di tecnologia sottostante. Docker offre un modello di implementazione basato su immagini, semplificando così la condivisione delle app tra ambienti di computing.

Per evitare qualsiasi tipo di confusione, l'omonima piattaforma container Docker si riferisce anche a Docker, Inc.4, che sviluppa strumenti per la produttività basati sulla sua piattaforma di containerizzazione open source e sull'ecosistema open source Docker e la community5.

Nel 2015, Docker e altri leader nel settore dei container hanno istituito The Open Container Initiative6 , parte della Linux Foundation, una struttura di governance aperta con il preciso scopo di creare standard di settore aperti sui  formati di container e sugli ambienti di runtime.

Docker è lo strumento di containerizzazione più utilizzato, con una quota di mercato pariall'82,84%7.

Orchestrazione di container con Kubernetes

La gestione di centinaia di migliaia di container in un sistema può diventare ingestibile e richiede una soluzione di gestione dell'orchestrazione.

È qui che entra in gioco l'orchestrazione dei container, che consente alle aziende di gestire grandi volumi durante tutto il loro ciclo di vita, offrendo:

  • Provisioning
  • Ridondanza
  • Monitoraggio dello stato di salute
  • assegnazione delle risorse
  • Scalabilità e bilanciamento del carico
  • Spostamento tra host fisici

Anche se esistono altre piattaforme di orchestrazione dei container (ad esempio Apache Mesos, Nomad, Docker Swarm), Kubernetes è diventato lo standard del settore.

L'architettura Kubernetes è costituita da cluster in esecuzione che consentono l'esecuzione di container su più computer e ambienti. Ogni cluster è in genere costituito da nodi di lavoro, che eseguono le applicazioni containerizzate e da nodi del piano di controllo, che controllano il cluster. Il piano di controllo ha funzione di orchestratore del cluster Kubernetes. Include diversi componenti: il server API (gestisce tutte le interazioni con Kubernetes), il Control Manager (gestisce tutti i processi di controllo), il Cloud Controller Manager (l'interfaccia con l'API del provider di cloud) e così via. I nodi di lavoro eseguono i container utilizzando runtime dei container come Docker. I pod, le unità implementabili più piccole in un cluster, contengono uno o più container di app e condividono risorse, ad esempio informazioni di storage e rete.

Kubernetes consente agli sviluppatori e agli operatori di dichiarare lo stato desiderato del proprio ambiente container complessivo attraverso file YAML. Kubernetes svolge quindi tutto il lavoro di elaborazione per stabilire e mantenere quello stato, con attività che includono l'implementazione di un determinato numero di istanze di una determinata applicazione o workload, il riavvio dell'applicazione in caso di mancato funzionamento, il bilanciamento del carico, l'autoscaling, le implementazioni dei tempi di inattività azzerati e altro ancora. Anche l'orchestrazione dei container con Kubernetes è fondamentale per l'integrazione costante e la fornitura costante (CI/CD) o la pipeline DevOps, che sarebbe impossibile senza l'automazione.

Nel 2015, Google ha donato Kubernetes alla Cloud Native Computing Foundation (CNCF)8, l'hub open source e vendor-neutral del cloud-native computing gestito con il supporto della Linux Foundation. Da allora Kubernetes è diventato lo strumento di orchestrazione dei container più usato in tutto il mondo per eseguire workload basati su container. In un report CNCF9, Kubernetes risulta il secondo progetto open-source più grande al mondo dopo Linux e lo strumento di orchestrazione dei container primario per il 71% delle aziende Fortune 100.

Che cosa sono i Container as a Service (CaaS)?

Container as a Service (CaaS) è un servizio di cloud computing che consente agli sviluppatori di gestire e implementare applicazioni containerizzate. Offre alle aziende di tutte le dimensioni l'accesso a soluzioni cloud scalabili e portatili.

Il CaaS fornisce una piattaforma basata su cloud in cui gli utenti possono semplificare i processi di virtualizzazione basata sui container e la gestione dei container stessi. I provider CaaS offrono una miriade di funzionalità, tra cui, a titolo esemplificativo ma non esaustivo, i runtime dei container, i livelli di orchestrazione e la gestione dello storage persistente.

Analogamente all'Infrastructure as a Service (IaaS), alla Platform as a Service (PaaS) e al Software as a Service (SaaS), CaaS è disponibile presso i provider di cloud service (ad esempio AWS, Google Cloud Services, IBM Cloud®, Microsoft Azure) tramite un modello di determinazione dei prezzi pay-as-you-go, che consente agli utenti di pagare solo per i servizi che realmente usano.

AI Academy

Prepararsi all'AI con l'hybrid cloud

Condotto dai migliori leader di pensiero di IBM, il programma di studi è stato progettato per aiutare i dirigenti aziendali ad acquisire le conoscenze necessarie per dare priorità agli investimenti in AI che possono favorire la crescita.

Casi d'uso per i container

Le organizzazioni utilizzano i container per supportare quanto segue:

Microservizi

I container sono piccoli e leggeri, il che li rende una buona soluzione per le architetture di microservizi, in cui le applicazioni sono costituite da numerosi servizi più piccoli liberamente accoppiati e implementabili indipendentemente.

DevOps

La combinazione di microservizi come architettura e container come piattaforma è una base comune per numerosi team di sviluppo e operativi che adottano le metodologie DevOps. Ad esempio, i container supportano le pipeline DevOps, tra cui l'integrazione costante e l'implementazione costante (CI/CD).

Ibrido e multicloud

Poiché i container possono funzionare in modo coerente ovunque, su laptop, ambienti on-premise e cloud, sono un'architettura di base ideale per gli scenari di cloud ibrido e multicloud in cui le organizzazioni si trovano a operare su più cloud pubblici in combinazione con il proprio data center.

Modernizzazione e migrazione delle applicazioni

Uno degli approcci più comuni alla modernizzazione delle applicazioni è la containerizzazione delle applicazioni in preparazione alla migrazione al cloud.

Workload AI e ML

La containerizzazione (ovvero immagini Docker orchestrate con Kubernetes) consente rapidamente alle pipeline DevOps di implementare app di intelligenza artificiale (AI) e machine learning (ML) in ambienti di cloud computing.

Generative AI

Inoltre, i container offrono un modo efficiente per implementare e gestire i modelli di grandi dimensioni (LLD) associati all'AI generativa, offrendo portabilità e scalabilità se utilizzati con gli strumenti di orchestrazione. Inoltre, le modifiche apportate agli LLM possono essere rapidamente inserite in una nuova immagine del container, accelerando lo sviluppo e il test.

Il più ampio ecosistema di container: Istio e Knative

Oltre a Kubernetes, due dei progetti più popolari nell'ecosistema dei container sono Istio e Knative.

Mesh di servizi Istio

Dal momento che gli sviluppatori usano i container per creare ed eseguire microservizi, i problemi di gestione vanno oltre le considerazioni relative al ciclo di vita dei singoli container e nei modi in cui un elevato numero di piccoli servizi, spesso definiti "service mesh", si connettono e si relazionano tra loro. Istio consente agli sviluppatori di gestire più facilmente le problematiche associate a rilevamento, traffico, monitoraggio, sicurezza e altro ancora.

Knative e serverless

Knative (pronuncia "kay-native") è una piattaforma open source che fornisce una facile soluzione di serverless computing, il modello di sviluppo ed esecuzione di applicazioni di cloud computing che consente agli sviluppatori di creare ed eseguire un codice applicativo senza provisioning o gestione di server o infrastrutture di backend.

Anziché distribuire un'istanza continua di codice che rimane inattiva in attesa di richieste, il serverless apre il codice secondo le necessità, lo ridimensiona o diminuisce in base alle fluttuazioni della domanda, e poi lo elimina quando non viene utilizzato. Serverless evita lo spreco di capacità e potenza di elaborazione e riduce i costi perché si paga solo per eseguire il codice quando è effettivamente in esecuzione.

Sicurezza e governance dei container

Poiché i container svolgono un ruolo importante nello sviluppo e nell'implementazione del software nei landscape hybrid cloud, le organizzazioni devono garantire che i workload containerizzati rimangano al sicuro dalle minacce alla sicurezza esterne e interne.

I container possono essere distribuiti ovunque, creando nuove superfici di attacco che circondano l'ambiente basato su container. Le aree di sicurezza vulnerabili includono immagini dei container, registri di immagini, runtime di container, piattaforme di orchestrazione dei contenitori e sistemi operativi host.

Per iniziare, le aziende devono integrare la sicurezza dei container nelle loro policy di sicurezza e nella strategia generale. Tali strategie devono includere le best practice di sicurezza insieme a strumenti software di sicurezza basati su cloud. Questo approccio olistico deve essere progettato in modo che protegga le applicazioni containerizzate e la loro infrastruttura sottostante lungo l'intero ciclo di vita del container.

Le best practice di sicurezza includono una strategia zero-trust basata sul presupporto che la sicurezza di una rete complessa sia sempre a rischio di minacce esterne e interne. Inoltre, i container richiedono un approccio DevSecOps. DevSecOps è una pratica di sviluppo delle applicazioni che automatizza l'integrazione delle pratiche di sicurezza in ogni fase del ciclo di vita dello sviluppo software, dalla progettazione iniziale all'integrazione, al test, alla consegna e alla distribuzione.

Le organizzazioni devono inoltre usare i giusti strumenti di sicurezza dei container per mitigare i rischi. Le soluzioni di sicurezza automatizzate includono la gestione della configurazione, il controllo degli accessi, la scansione di malware o attacchi informatici, la segmentazione della rete, il monitoraggio e altro ancora.

Inoltre, sono disponibili strumenti software per garantire che i workload containerizzati rispettino gli standard normativi e di conformità come GDPR, HIPAA, ecc.

Soluzioni correlate
IBM Red Hat OpenShift

Red Hat OpenShift on IBM Cloud è una OpenShift Container Platform (OCP) completamente gestita.

Esplora Red Hat OpenShift
Soluzioni container

Le soluzioni basate su container eseguono e scalano workload containerizzati con sicurezza, innovazione open source e implementazione rapida.

Esplora i container
Servizi di consulenza cloud 

Sblocca nuove funzionalità e promuovi l'agilità aziendale con i servizi di consulenza cloud di IBM. Scopri come creare insieme soluzioni, accelerare la trasformazione digitale e ottimizzare le prestazioni attraverso strategie di hybrid cloud e partnership di esperti.

Servizi cloud
Fai il passo successivo

Modernizza la tua infrastruttura con le soluzioni container di IBM. Esegui, scala e gestisci i workload basati su container in tutti gli ambienti con flessibilità, sicurezza ed efficienza utilizzando la piattaforma container completa di IBM.

Esplora le soluzioni container Crea un account IBM Cloud gratuito