Le applicazioni containerizzate sono applicazioni eseguite in pacchetti di codice isolati detti container. I container includono tutte le dipendenze necessarie per l'esecuzione di un'applicazione su qualsiasi sistema operativo host, come librerie, file binari, file di configurazione e framework, in un unico file eseguibile leggero.
Il processo di containerizzazione delle applicazioni rende lo sviluppo delle applicazioni più rapido, efficiente e sicuro separando funzionalità diverse dalle dipendenze hardware e da altre parti del software. I container possono essere eseguiti su qualsiasi sistema operativo host e sono isolati dagli altri oggetti software e hardware, il che li rende strumenti versatili per creare applicazioni che possono essere create una sola volta ed eseguite ovunque.
Dalla Ricerca Google a YouTube e Gmail, ogni cosa in Google viene eseguita attraverso container. Le piattaforme open source Kubernetes e Knative sono state sviluppate da Google e sono tra gli strumenti più utilizzati per gestire container e applicazioni.
Isolamento
Poiché ogni applicazione containerizzata esiste in un ambiente isolato, lontano da altre app e componenti di sistema, i guasti all'interno dell'applicazione non influiranno su altre applicazioni o sul sistema locale, il che può limitare l'ambito degli incidenti relativi ai bug.
Portabilità
Le applicazioni containerizzate operano indipendentemente dal sistema operativo e, di conseguenza, possono essere portate in quasi tutti gli ambienti, come server fisici, macchine virtuali, sulla macchina personale di uno sviluppatore o nel cloud.
Leggera
A differenza delle macchine virtuali, i container non includono una versione del sistema operativo e questo li rende molto più leggeri ed efficienti di altri metodi di virtualizzazione.
Efficienza
Le applicazioni di containerizzazione possono condividere il kernel di calcolo e le risorse di una macchina, mentre i livelli dell'applicazione all'interno di un container possono essere condivisi tra più container. Le applicazioni containerizzate richiedono quindi meno risorse, consentendo l'esecuzione di più container sulla stessa macchina o nello stesso ambiente virtuale.
Scalabilità
È possibile aggiungere rapidamente altre istanze di container per gestire un aumento del carico di applicazioni.
Le applicazioni containerizzate funzionano mediante l'esecuzione di un pacchetto di software eseguibile (il container) che includa tutte le dipendenze dell'applicazione necessarie per l'esecuzione dell'app su un sistema operativo host. L'applicazione containerizzata ha vari oggetti, compresi tutti i componenti dell'app (ad esempio framework, librerie) che compongono l'immagine container, che viene quindi eseguita dal motore del ontainer. L'immagine di container è il progetto o l'architettura del sistema di container. Quando l'applicazione viene eseguita, i contenuti dell'immagine vengono copiati in un'istanza di container e possono essere utilizzati in un numero qualsiasi di container all'interno dell'applicazione. Le immagini di container vengono create in base a uno standard di settore chiamato Open Container Initiative (OCI) che favorisce la condivisibilità e la compatibilità dei container.
I motori dei container sono l'ambiente di runtime per il container e la piattaforma da cui vengono eseguite le applicazioni containerizzate. I motori dei container accettano i comandi per creare, gestire e avviare i container tramite gli strumenti client. I motori dei container più diffusi sono Docker o CRI-O.
Gli strumenti di orchestrazione vengono utilizzati per gestire le applicazioni containerizzate, soprattutto in ambienti con molti container. Strumenti di orchestrazione, come Kubernetes, per il deployment, la gestione e la scalabilità dei container
I container e le macchine virtuali hanno una funzione simile, ma i container tendono a utilizzare meno risorse e sono più flessibili.
Le macchine virtuali consentono a più applicazioni e sistemi operativi di condividere le risorse di un singolo computer o server fisico e di essere eseguite contemporaneamente (ad esempio, Windows e Linux che condividono lo stesso computer). Una macchina virtuale trasporta i suoi file e le sue dipendenze, oltre alla propria copia del sistema operativo.
A differenza delle macchine virtuali, i container non includono una copia del sistema operativo. Per questo motivo, la differenza principale tra container e macchine virtuali è che la containerizzazione utilizza le risorse di calcolo in modo più efficiente. Il runtime del container viene invece installato sul sistema operativo esistente del computer o del server, consentendo a tutti i container di condividere lo stesso sistema operativo.
Al livello più elementare, i container sono di due tipi: container di sistema e container di applicazioni.
I container di applicazioni sono soluzioni stateless che in genere eseguono un singolo processo. Quando parliamo di applicazioni containerizzate, eseguiamo container di applicazioni dove ogni container gestisce un processo, con più container orchestrati da uno strumento come Kubernetes.
I container di applicazioni abbondano sul mercato. Docker è considerato il più popolare, ma ce ne sono molti altri. Lo sviluppo open source dei container è gestito da OCI.
I container di sistema, noti anche come container dei sistemi operativi, sono meno recenti e funzionano in modo molto simile alle macchine virtuali, ma senza lo stesso overhead di calcolo. Il comportamento è uguale a quello di un sistema autonomo e non include l'immagine di container né richiede software specializzato. I container di sistema venivano generalmente utilizzati in applicazioni legacy monolitiche.
Di seguito sono riportati alcuni dei motori e dei tipi di strumenti più comuni delle applicazioni containerizzate:
La piattaforma open source più diffusa per la containerizzazione. Docker consente la creazione e il funzionamento di container basati su Linux.
LXC, progetto open source di LinuxContainers.org, consente a un'app di eseguire più sistemi Linux contemporaneamente, utilizzando un unico kernel Linux come sistema operativo.
Conosciuto anche come Rocket, rkt è un motore di container basato su applicazioni che consente un controllo granulare dei container o come componenti specifici all'interno di un sistema di container Docker.
Una Container Runtime Interface (CRI) per la piattaforma di gestione dei container Kubernetes, utilizzata per abilitare runtime compatibili con OCI. Spesso utilizzato in sostituzione di Docker durante l'utilizzo di Kubernetes.
Inizia a creare su Google Cloud con 300 $ di crediti gratuiti e oltre 20 prodotti Always Free.