I container sono unità eseguibili di software in cui il codice dell'applicazione viene impacchettato insieme alle librerie e alle dipendenze, secondo modalità comuni, in modo che il codice possa essere eseguito ovunque, che si tratti di desktop, IT tradizionale o 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.
I container sono piccoli, veloci e portatili perché, a differenza di una macchina virtuale, non hanno bisogno di includere un sistema operativo guest in ogni istanza e possono invece semplicemente utilizzare le funzionalità e le risorse del sistema operativo host.
I container sono apparsi per la prima volta decenni fa con versioni come FreeBSD Jails e AIX Workload Partitions, ma la maggior parte degli sviluppatori moderni ricorda che il 2013 è l'inizio dell'era dei container con l'introduzione di Docker.
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.
Registrati per ricevere la guida su DaaS
Per capire meglio cos'è un container possiamo dire in che cosa differisce da una tradizionale macchina virtuale (VM). Nella tradizionale virtualizzazione, che sia on-premise o nel cloud, viene utilizzato un hypervisor per virtualizzare l'hardware fisico. 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.
Invece di virtualizzare l'hardware sottostante, i container virtualizzano il sistema operativo (tipicamente Linux) in modo che ogni singolo container contenga 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 portatili.
Per un'analisi più approfondita di questo confronto, dai un'occhiata a "Containers vs. VMs: What's the difference?"
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:
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, soprattutto rispetto alle VM, consentono ai container di avviarsi rapidamente e supportare meglio le applicazioni cloud-native con scalabilità orizzontale.
Portatili e indipendenti dalla piattaforma: i container si portano dietro tutte le dipendenze, e questo implica che il software può essere scritto una volta e quindi eseguito senza dover essere riconfigurato su laptop, cloud e ambienti di elaborazione on-premise.
Supporta lo sviluppo e l'architettura moderni: grazie a una combinazione di portabilità/coerenza di implementazione su più piattaforme e dimensioni ridotte, i container sono la soluzione ideale per lo sviluppo moderno e i modelli applicativi, come DevOps, serverless e microservizi, costruiti utilizzando distribuzioni regolari di codice in piccoli incrementi.
Migliora l'utilizzo: come prima le VM, i container consentono agli sviluppatori e agli operatori di migliorare l'utilizzo della CPU e della memoria delle macchine fisiche. Il punto in cui i container si spingono ancora oltre è che, poiché abilitano anche l'architettura dei microservizi, i componenti dell'applicazione possono essere distribuiti e scalati in modo più granulare. Si tratta di un'opzione alternativa interessante rispetto alla necessità di scalare un'intera applicazione monolitica perché un singolo componente ha difficoltà con il suo carico.
In un recente sondaggio IBM, sviluppatori e dirigenti IT hanno riscontrato molti altri benefici nell'utilizzo dei container.
Scarica il report completo: Containers in the enterprise
I container stanno diventando sempre più importanti, specialmente negli ambienti cloud. Molte organizzazioni stanno addirittura prendendo in considerazione i container per sostituire le macchine virtuali come piattaforma di calcolo generica per le applicazioni e i workload. Ma all'interno di questo ampio ambito, ci sono casi d'uso chiave in cui i container sono particolarmente rilevanti.
Il software deve essere progettato e impacchettato in modo diverso per utilizzare al meglio i container, un processo comunemente denominato containerizzazione.
Quando si containerizza un'applicazione, il processo comprende l'impacchettamento di un'applicazione con le relative variabili d'ambiente, i file di configurazione, le librerie e le dipendenze software. Il risultato è un'immagine container che può essere eseguita su una piattaforma container.
Orchestrazione di container con Kubernetes
Quando le aziende hanno iniziato ad adottare i container, spesso come parte di moderne architetture cloud-native, la semplicità del singolo container ha iniziato a scontrarsi con la complessità della gestione di centinaia (o addirittura migliaia) di container in un sistema distribuito.
Per affrontare questa problematica, l'orchestrazione dei container si è configurata come la soluzione giusta per gestire grandi volumi di container durante l'intero ciclo di vita, tra cui:
Anche se sono state create molte piattaforme di orchestrazione dei container (come Apache Mesos, Nomad e Docker Swarm), Kubernetes, un progetto open source presentato da Google nel 2014, è diventato rapidamente la piattaforma di orchestrazione dei container più diffusa ed è quella su cui la maggior parte del settore ha basato la sua standardizzazione.
Kubernetes consente agli sviluppatori e agli operatori di dichiarare lo stato desiderato dell'ambiente complessivo dei container tramite file YAML, e quindi Kubernetes svolge tutto il lavoro di elaborazione per stabilire e mantenere tale stato, con attività che comprendono la distribuzione di un numero specifico di istanze di una determinata applicazione o workload, il riavvio dell'applicazione in caso di guasto, il bilanciamento del carico, l'auto-scaling, le distribuzioni senza tempi di inattività e altro ancora.
Kubernetes è ora gestito dalla Cloud Native Computing Foundation (CNCF), un gruppo industriale indipendente dal fornitore gestito sotto gli auspici della Linux Foundation.
Man mano che i container continuano a guadagnare terreno come metodo popolare per creare pacchetti ed eseguire applicazioni, l'ecosistema di strumenti e progetti ideati per accogliere ed espandere i casi d'uso di produzione continua a crescere. Oltre a Kubernetes, due dei progetti più popolari nell'ecosistema dei contenitori sono Istio e Knative.
istio
Poiché gli sviluppatori utilizzano i container per creare ed eseguire architetture di microservizi, i problemi di gestione vanno oltre le considerazioni relative al ciclo di vita dei singoli container e riguardano i modi in cui un gran numero di piccoli servizi, spesso definiti "service mesh", si connettono e si relazionano tra loro. Istio è stato creato per consentire agli sviluppatori di gestire più facilmente le problematiche associate a rilevamento, traffico, monitoraggio, sicurezza e altro ancora.
Maggiori informazioni su Istio
knative
Anche le architetture serverless continuano a crescere in popolarità, in particolare all'interno della comunità cloud-native. Knative, ad esempio, offre un valore sostanziale nella sua capacità di implementare servizi containerizzati come funzioni serverless.
Invece di essere sempre in esecuzione e rispondere quando necessario (come fa un server), una funzione serverless può "scalare a zero", ovvero non entrare in esecuzione a meno che non venga chiamata. Questo modello può far risparmiare grandi quantità di potenza di calcolo se applicato a decine di migliaia di container.
Red Hat OpenShift on IBM Cloud utilizza OpenShift in ambienti pubblici e ibridi per una maggiore velocità, reattività al mercato, scalabilità e affidabilità.
Che si tratti di implementazione, creazione di nuove applicazioni cloud-native, refactoring o replatforming di applicazioni esistenti, CP4Apps ha tutto ciò che serve.
Con IBM Cloud Satellite puoi avviare servizi cloud coerenti ovunque, in ambienti on-premise, sull'edge e in ambienti di cloud pubblico.
Esegui immagini di container, processi batch o codice sorgente come workload serverless, senza necessità di dimensionamento, implementazione, rete o scalabilità.
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.
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.
Una nuova ricerca IBM documenta il crescente slancio dell’adozione di container e Kubernetes.
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.
Docker è una piattaforma open source per la creazione, l'implementazione e la gestione di applicazioni containerizzate.