Home

topics

containers

Cosa sono i contenitori?
Scopri Red Hat OpenShift su IBM Cloud Registrati per ricevere gli aggiornamenti cloud
Illustrazione con collage di pittogrammi di monitor del computer, server, nuvole, punti collegati

Data di pubblicazione: 9 maggio 2024
Collaboratori: Stephanie Susnjara, Ian Smalley

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.

Più portatile ed efficiente in termini di risorse rispetto alle virtual machines (VM), i container sono diventati le unità di calcolo delle moderne applicazioni cloud-native. Inoltre, i container sono fondamentali per l'infrastruttura IT sottostante che alimenta le impostazioni del multicloud ibrido: la combinazione di cloud on-premises, privatopubblico e più di un cloud service di diversi fornitori 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%.

La modernizzazione strategica delle applicazioni spinge la trasformazione digitale

La modernizzazione delle applicazioni strategica è fondamentale per il successo della trasformazione e può incrementare i ricavi annuali e ridurre i costi di manutenzione e di gestione.

Contenuti correlati Iscriviti alla newsletter IBM
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.

Contenitori e macchine virtuali non sono mutualmente esclusivi. Ad esempio, un'organizzazione potrebbe sfruttare entrambe le tecnologie eseguendo container nelle macchine virtuali per aumentare l'isolamento e la sicurezza e sfruttare 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 VM. Questa funzione aiuta a risparmiare tempo e denaro nella distribuzione delle applicazioni e ottimizza 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 è un'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 cloud e altro ancora. 

L'evoluzione della containerizzazione

La containerizzazione e l'isolamento dei processi sono esistiti per decenni2. Nel 1979 si è verificato un momento storico 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 fornitore3, sono disponibili tecnologie del kernel Linux più recenti. Ubuntu, un moderno sistema operativo Linux open source, offre anche 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 distribuzione basato su immagini, semplificando la condivisione delle app tra ambienti di elaborazione.

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 nel loro stile di vita, grazie ai seguenti strumenti: 

  • 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 col supporto della Linux Foundation. Da allora Kubernetes è diventato lo strumento di orchestrazione dei container più utilizzato in tutto il mondo per eseguire workload basati su container. In un report CNCF9, Kubernetes è il secondo progetto open-source più grande del mondo (dopo Linux) e lo strumento primario di orchestrazione dei container 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 distribuire applicazioni containerizzate. Offre alle aziende di tutte le dimensioni l'accesso a soluzioni cloud portatili e facilmente scalabili.

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), il CaaS è disponibile presso i provider di cloud service (ad esempio AWS, Google Cloud Services, IBM Cloud, Microsoft Azure) attraverso un modello di determinazione dei prezzi pay-as-you-go, che consente agli utenti di pagare solo per i servizi che effettivamente utilizzano.

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 utilizzano 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 gran 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 (si 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 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 anche utilizzare i giusti strumenti di sicurezza dei container per mitigare i rischi. Le soluzioni automatizzate per la sicurezza 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
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à al mercato, scalabilità e affidabilità.

Scopri Red Hat OpenShift su IBM Cloud
IBM Cloud Pak for Applications

Che si tratti di implementazione, creazione di nuove applicazioni cloud-native, refactoring o replatforming di applicazioni esistenti, Cloud Pak for Applications (CP4Apps) ha tutto ciò che serve.

Esplora IBM Cloud Pak for Applications
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 workload serverless, senza necessità di dimensionamento, implementazione, rete o scalabilità.

Esplora IBM cloud code engine
IBM Cloud Container Registry

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

Esplora IBM Cloud Container Registry
IBM Turbonomic

Determina automaticamente le corrette azioni di allocazione delle risorse e il momento giusto per effettuarle, al fine di garantire che gli ambienti Kubernetes e le applicazioni mission-critical ottengano esattamente quanto necessario per soddisfare gli SLO.

Esplora IBM Turbonomic
IBM Fusion

Il software Fusion viene eseguito ovunque viene eseguito Red Hat OpenShift: su cloud pubblico, on-premise, bare metal e macchine virtuali. Fusion offre un modo semplice per implementare le applicazioni Red Hat OpenShift e IBM watsonx.

Esplora IBM Fusion
Risorse Containers in the enterprise

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

Combina le migliori caratteristiche del cloud e dell'IT tradizionale

L'orchestrazione di contenitori è un componente chiave di una strategia di cloud ibrido aperto che consente di creare e gestire i carichi di lavoro ovunque ti trovi.

Cos'è Docker?

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

La containerizzazione gioca un ruolo cruciale nello sviluppo di applicazioni moderne. In questo video, Chris Rosen illustra quattro casi d'uso per lo sviluppo di software e le operazioni IT per aiutare a massimizzare le prestazioni e i tempi di attività, ridurre al minimo i costi, rimanere agili e mantenere la conformità.

Cos'è Kubernetes?

Kubernetes, noto anche come k8s o kube, è una piattaforma di orchestrazione di container open source per pianificare e automatizzare l'implementazione, la gestione e la scalabilità delle applicazioni containerizzate.

Che cos'è il bilanciamento del carico?

Il bilanciamento del carico è il processo di distribuzione efficiente del traffico di rete tra più server per ottimizzare la disponibilità delle applicazioni e garantire un'esperienza positiva agli utenti finali.

Fai il passo successivo

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.

Scopri Red Hat OpenShift su IBM Cloud Inizia gratuitamente