Cosa sono i container?

Un container è un pacchetto standalone leggero che incapsula un ambiente di runtime completo comprensivo di un'applicazione e le relative dipendenze (librerie, file binari e qualsiasi file di configurazione aggiuntivo), aumentando la portabilità, la scalabilità, la sicurezza e l'agilità di un'applicazione.

I container sono apprezzati da sviluppatori e operatori perché offrono un modo semplice per distribuire e gestire le applicazioni, indipendentemente dall'ambiente di destinazione. Semplificano le pratiche di DevOps e DevSecOps migliorando i passaggi di consegne tra i team di sviluppo e quelli delle operation.

I container consumano le risorse in modo efficiente, consentendo una densità e un livello di utilizzo elevati. I container possono essere utilizzati con quasi tutte le applicazioni, ma sono spesso associati ai microservizi, in cui più container eseguono componenti di applicazioni o servizi separati. I container che compongono un'applicazione sono in genere coordinati e gestiti tramite una piattaforma di orchestrazione dei container, come Kubernetes.

I container vengono creati pacchettizzando le applicazioni da più immagini di uno o più repository insieme a qualsiasi libreria o altre dipendenze dell'applicazione, eliminando i problemi di portabilità e compatibilità.

Un nuovo modo di creare container per Kubernetes

Un nuovo modo di creare container per Kubernetes

Le sinergie tra container e macchine virtuali

Container e VM a confronto

Ogni macchina virtuale (VM) esegue un'istanza completa o parziale di un sistema operativo, mentre più container condividono una singola istanza del sistema operativo. Un container include tutto il necessario per eseguire un'applicazione, consentendo l'esecuzione indipendente di più applicazioni containerizzate su un singolo sistema host. Poiché è possibile eseguire più container all'interno di una VM, le due tecnologie possono essere utilizzate insieme.

Quali sono i vantaggi dell'utilizzo di container?

L'utilizzo di container per creare applicazioni accelera la distribuzione di nuove funzionalità e incoraggia un ambiente di innovazione continua. I vantaggi includono quanto segue:

Agilità. La maggiore agilità degli sviluppatori aumenta la produttività e accelera lo sviluppo delle app. I container semplificano le pipeline CI/CD e sono ideali per i team DevOps e i deployment di microservizi.

Scalabilità e alta disponibilità. Utilizzando Kubernetes, i deployment dei container possono essere scalati verticalmente e orizzontalmente in modo automatico al variare dei requisiti dei carichi di lavoro, aumentando la disponibilità delle app.

Portabilità. I container consumano meno risorse e sono più leggeri delle VM. Le applicazioni containerizzate sono indipendenti dall'infrastruttura e funzionano allo stesso modo indipendentemente da dove vengono distribuite.

Resilienza. Un'applicazione containerizzata viene isolata e astratta dal sistema operativo e da altri container; un container può subire un guasto senza influire sugli altri container in esecuzione.

Standard per i container

Gli standard per la formattazione dei container e gli ambienti di runtime sono controllati dall'Open Container Initiative (OCI), un progetto nato nel 2015 con lo scopo specifico di creare standard di settore aperti. L'OCI include attualmente due specifiche: Runtime Specification (runtime-spec) e Image Specification (image-spec).

Sicurezza dei container

I container richiedono modifiche al modo in cui le policy di sicurezza vengono implementate e gestite. La sicurezza deve essere integrata il più possibile nel ciclo di vita dei container, utilizzando un approccio di tipo DevSecOps. I team di sicurezza, che collaborano con i team di sviluppo e delle operation, adattano le policy di compliance e governance esistenti per accogliere nuovi strumenti e modifiche al ciclo di vita delle applicazioni.

Automazione dei container

L'impegno manuale rallenta i team di sviluppo. L'automazione dei container consente agli sviluppatori di concentrarsi sul codice anziché sulla pacchettizzazione. Le immagini dei container sono integrate in layer. Con un approccio automatizzato alla creazione di container, ogni volta che un layer cambia, solo quel layer deve essere aggiornato. Ad esempio, se è necessario aggiornare solo le librerie di sistema, è necessario ricreare solo il layer che contiene le librerie. Poiché gli altri layer rimangono invariati, il carico di test e convalida è ridotto, consentendo di inserire in produzione più rapidamente e con maggiore frequenza i container aggiornati.

Docker

Dalla sua introduzione nel 2013, Docker è stato quasi sinonimo di container e continua a essere utilizzato per creare le immagini dei container. L'ambiente Docker include un runtime dei container, nonché la creazione di container e la gestione delle immagini. Poiché Docker crea un'immagine del container standard OCI, le immagini Docker verranno eseguite su qualsiasi runtime del container conforme a OCI.

Kubernetes

Kubernetes è un orchestrator di container Open Source che è diventato uno standard di fatto. Kubernetes automatizza il deployment, il bilanciamento del carico, l'allocazione delle risorse e l'applicazione della sicurezza per i container tramite la configurazione dichiarativa e l'automazione. Mantiene in esecuzione le applicazioni containerizzate nello stato desiderato, assicurandone la scalabilità e la resilienza. L'orchestrazione dei container aiuta a gestire la complessità del ciclo di vita dei container. Ciò diventa particolarmente importante per le applicazioni distribuite con un numero elevato di container.
Kubernetes sta passando alla Container Runtime Interface (CRI), che supporta un set più ampio di runtime per container con interoperabilità senza problemi tra i diversi runtime. A dicembre 2020 è stata annunciata la dismissione del runtime di Docker per l'utilizzo con Kubernetes.

Casi d'uso dei container

Per gli sviluppatori

  • Migliora la portabilità delle applicazioni su diverse piattaforme e configurazioni, in modo che il codice sviluppato su una versione di un compilatore o un interprete di linguaggi venga eseguito senza problemi sulle versioni successive senza necessità di revisioni.
  • Libera gli sviluppatori dal compito di sviluppare, testare e distribuire sulla stessa infrastruttura. In questo modo gli sviluppatori che scrivono codice sui loro laptop possono essere certi che l'applicazione verrà eseguita come desiderato su qualsiasi altra infrastruttura, sia essa un server on-premise o una VM basata su cloud.
  • Facilita processi di sviluppo agili come CI/CD, accelerando l'accettazione del codice e il deployment.

Per le operation IT

  • Migliora la sicurezza delle applicazioni isolandole da altre applicazioni in modo leggero.
  • Migra senza problemi le applicazioni containerizzate tra diverse versioni di sistemi operativi, topologie di rete o configurazioni di storage e piattaforme cloud.
  • Migliora l'efficienza IT abilitando l'esecuzione di più container di applicazioni su una singola istanza del sistema operativo. Poiché i container hanno spesso dimensioni di decine di megabyte, a differenza delle VM che hanno una dimensione di dieci o più gigabyte, un numero sostanzialmente maggiore di container può essere eseguito su una singola istanza del server.

Offri una scalabilità on demand estrema, attivando istanze di container aggiuntive in pochi millisecondi rispetto ai minuti necessari per attivare le VM.

Soluzioni e prodotti correlati

Modernizzazione delle applicazioni con Kubernetes

Offri Kubernetes predisposto per gli sviluppatori nel data center o nel cloud

Crea i container dal codice sorgente per Kubernetes

VMware Tanzu Build Service automatizza la creazione, la gestione e la governance dei container su scala aziendale.

Sfrutta una gestione Kubernetes multi-cloud

VMware Tanzu Mission Control è una piattaforma di gestione Kubernetes multi-cloud che virtualizza il cloud offrendo una piattaforma coerente basata su Kubernetes che consente la gestione, il funzionamento e la distribuzione delle applicazioni secondo necessità su qualsiasi cloud.