Cosa sono i container?
Scopri l'importanza dei container nel cloud computing, i relativi vantaggi principali e l'ecosistema emergente di tecnologie correlate, tra cui Docker, Kubernetes, Istio e Knative
Iscriviti alla newsletter di IBM
Sfondo nero e blu con forme geometriche raggruppate
Cosa sono i container?

I container sono delle unità eseguibili di software in cui viene impacchettato il codice applicativo, insieme alle sue librerie e dipendenze, con modalità comuni in modo da poter essere eseguito ovunque, sia su desktop che su IT tradizionale o cloud.

A tal fine, i container sfruttano una forma di virtualizzazione del sistema operativo in cui le caratteristiche del kernel del sistema operativo (ad esempio i namespace e i cgroup di Linux, i silos e gli oggetti processo di Windows) possono essere sfruttate per isolare i processi e controllare la quantità di CPU, memoria e disco a cui tali processi possono accedere.

I container sono piccoli, veloci e portabili perché, diversamente da una VM, non hanno bisogno di includere un sistema operativo guest in ogni istanza e possono invece sfruttare semplicemente le funzioni e le risorse del sistema operativo host.

I container sono apparsi per la prima volta decenni fa con versioni come le jail FreeBSD e le partizioni di carico di lavoro (WPAR) AIX, ma la maggior parte degli sviluppatori moderni ricorda il 2013 come l'inizio dell'era dei container moderni con l'introduzione di Docker.

Confronto tra container e VM

Un modo per comprendere meglio un container è capire come si differenzia da una VM tradizionale. Nella virtualizzazione tradizionale - che sia on-premise o nel cloud - viene utilizzato efficacemente un hypervisor per virtualizzare l'hardware fisico. Ogni VM contiene quindi un sistema operativo guest, una copia virtuale dell'hardware di cui il sistema operativo ha bisogno per essere eseguito, insieme a un'applicazione e alle relative librerie e dipendenze associate.

Invece di virtualizzare l'hardware sottostante, i container virtualizzano il sistema operativo (di solito Linux), in modo che ogni singolo container includa solo l'applicazione e le relative librerie e dipendenze. L'assenza del sistema operativo guest è il motivo per cui i container sono così leggeri e, quindi, veloci e portabili.

Per un esame più approfondito di questo confronto, consulta "Containers vs. VMs: What's the difference?"

Vantaggi dei container

Il vantaggio principale dei container, soprattutto rispetto a una VM, è che forniscono un livello di astrazione che li rende leggeri e portabili. I vantaggi principali includono:

Leggero: i container condividono il kernel del sistema operativo della macchina, eliminando la necessità di un'istanza del sistema operativo completa per ogni applicazione e rendendo i file container piccoli e poco gravosi sulle risorse. La loro dimensione più piccola, soprattutto rispetto alle VM, significa che possono essere avviati rapidamente e supportare meglio le applicazioni native del cloud di cui viene eseguita la scalabilità orizzontale.

Portabili e indipendenti dalla piattaforma: i container portano tutte le loro dipendenze con loro, il che significa che il software può essere scritto una volta e quindi eseguito senza che occorra riconfigurarlo su ambienti di calcolo on-premise, su cloud e su laptop.

Supporta un tipo moderno di sviluppo e architettura: a causa di una combinazione di portabilità/coerenza di implementazione sulle varie piattaforme e delle dimensioni ridotte, i container sono la scelta ideale per pattern moderni di sviluppo e applicazioni, ad esempio DevOpsserverless e microservizi, che sono creati per implementazioni di codice regolari, in piccoli incrementi.

Migliora l'utilizzo: come le VM prima di loro, i container consentono agli sviluppatori e agli operatori di migliorare l'utilizzo di CPU e memoria delle macchine fisiche. Grazie al fatto che abilitano anche le architetture di microservizi, i container vanno anche oltre poiché i componenti applicativi possono essere implementati e scalati in modo più granulare, un'attraente alternativa al dover eseguire una scalabilità incrementale di un'intera applicazione monolitica a causa di un singolo componente che sta avendo difficoltà a gestire il suo carico.

In un recente sondaggio (PDF, 1,4 MB), sviluppatori e dirigenti IT hanno indicato molti altri vantaggi derivanti dall'utilizzo dei container.

Scarica il report completo: Containers in the enterprise (PDF, 1,4 MB)

Casi di utilizzo per i container

I container stanno diventando sempre più importanti, soprattutto negli ambienti cloud. Molte organizzazioni stanno anche prendendo in considerazione l'utilizzo dei container al posto delle VM come piattaforma di calcolo per utilizzo generico per le loro applicazioni e i loro carichi di lavoro. All'interno di questo ambito molto ampio, però, ci sono dei casi di utilizzo chiave in cui i container sono particolarmente rilevanti.

  • Microservizi: i container sono piccoli e leggeri, il che li rende un valido abbinamento per le architetture di microservizi, dove le applicazioni sono costituite da molti servizi di dimensioni più ridotte, accoppiati in modo lasco e implementabili in modo indipendente.
  • DevOps: la combinazione di microservizi come architettura e di container come piattaforma è una base comune per molti team che adottano DevOps come modalità per le loro attività di creazione, distribuzione ed esecuzione di software.
  • Cloud ibrido e multicloud: poiché i container possono essere eseguiti in modo coerente ovunque, su laptop e in ambienti on-premise e cloud, sono l'architettura sottostante ideale per scenari di cloud ibrido e multicloud in cui le organizzazioni si trovano ad operare in un ambiente misto di molteplici cloud pubblici in combinazione con il loro data center.
  • Modernizzazione e migrazione delle applicazioni: uno degli approcci più comuni alla modernizzazione delle applicazioni è quello di caricare in container le applicazioni in preparazione per la migrazione al cloud.
Containerizzazione

Il software deve essere progettato e impacchettato in modo diverso per poter usufruire dei container, un processo comunemente denominato containerizzazione.

Quando si esegue la containerizzazione di un'applicazione, il processo include l'impacchettamento di un'applicazione con le sue variabili di ambiente, i suoi file di configurazione, le sue librerie e le sue dipendenze software pertinenti. Il risultato è un'immagine container che può quindi essere eseguita su una piattaforma container.

Orchestrazione dei container con Kubernetes

Man mano che le aziende hanno cominciato ad adottare i container - spesso come parte di architetture moderne native del cloud - la semplicità del singolo container ha cominciato a collidere con la complessità della gestione di centinaia (e anche migliaia) di container in un sistema distribuito.

Per affrontare questa sfida, è emersa l'orchestrazione dei container come un modo per gestire grandi volumi di container lungo tutto il loro ciclo di vita, compresi:

  • Provisioning
  • Ridondanza
  • Monitoraggio dello stato d'integrità
  • Allocazione delle risorse
  • Scalabilità e bilanciamento del carico
  • Spostamento tra host fisici

Sebbene siano state create molte piattaforme di orchestrazione dei container (come Apache Mesos, Nomad e Docker Swarm), Kubernetes, un progetto open source introdotto da Google nel 2014, è diventato rapidamente la piattaforma di orchestrazione dei container più diffusa ed è quella in base alla quale la maggior parte del settore ha fissato lo standard.

Kubernetes consente agli sviluppatori e agli operatori di dichiarare uno stato desiderato del loro ambiente container complessivo tramite i file YAML e Kubernetes si occupa quindi di tutto il resto stabilendo e mantenendo tale stato, con attività che includono l'implementazione di uno specifico numero di istanze di una specifica applicazione o uno specifico carico di lavoro, il riavvio di detta applicazione se si verifica un suo malfunzionamento, il bilanciamento del carico, la scalabilità automatica, le implementazioni con un tempo di inattività pari a zero e altro ancora.

Kubernetes è ora gestito dalla CNCF (Cloud Native Computing Foundation), ossia un gruppo di settore indipendente dai fornitori sotto gli auspici della Linux Foundation.

Il video disponibile di seguito illustra il funzionamento di Kubernetes:

Istio, Knative e l'ecosistema dei container in espansione

Man mano che i container continuano a prendere slancio come un modo diffuso per impacchettare ed eseguire applicazioni, l'ecosistema di strumenti e progetti concepiti per consolidare ed espandere i casi di utilizzo di produzione continua a crescere. Oltre a Kubernetes, due dei progetti più diffusi dell'ecosistema dei container sono Istio e Knative.

Istio

Man mano che gli sviluppatori sfruttano i container per creare ed eseguire architetture di microservizi, le preoccupazioni di gestione vanno oltre le considerazioni sul ciclo di vita dei singoli container e riguardano il modo in cui grandi numeri di piccoli servizi - spesso indicati come "mesh di servizi" - si connettono e si correlano tra loro. Istio è stato creato per consentire agli sviluppatori di gestire più agevolmente le sfide associate a rilevamento, traffico, monitoraggio, sicurezza e altro ancora. 

Scopri di più su Istio

Knative

Anche le architetture serverless continuano a crescere in popolarità, in particolare all'interno della community nativa del cloud. Knative, ad esempio, offre valore sostanziale nella sua capacità di implementare servizi containerizzati come funzioni serverless.

Invece di essere costantemente in esecuzione e di rispondere quando è necessario (come fa un server), una funzione serverless può "scalare a zero", il che significa che non è affatto in esecuzione a meno che non venga richiamata. Questo modello può consentire di risparmiare ampie quantità di potenza di calcolo quando viene applicato a decine di migliaia di container. 

Il video disponibile di seguito contiene ulteriori informazioni su Knative:

Soluzioni correlate
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à.

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, implementazione, rete o scalabilità.

Esplora IBM Cloud Code Engine
IBM Cloud Container Registry

IBM Cloud Container Registry ti offre un registro privato che ti consente di gestire le tue immagini e di monitorarle per eventuali problemi di sicurezza.

Esplora IBM Cloud Container Registry
Risorse Containers in the enterprise

Una nuova ricerca IBM documenta lo slancio crescente di adozione di container e Kubernetes.

Combina le migliori caratteristiche del cloud e dell'IT tradizionale

L'orchestrazione del container è un componente chiave di una strategia di cloud ibrido che ti consente di creare e gestire carichi di lavoro da qualsiasi ubicazione.

Cos'è Docker?

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

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. Puoi delegare 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