Container: cosa sono? A cosa servono?

A4 31

Negli ultimi anni potresti aver sentito parlare di container, architettura a microservizi, orchestrazione, Docker e Kubernetes. Se ti stai approcciando per la prima a questo mondo e/o vorresti approfondire le tue conoscenze, sei nel posto giusto!

In questa serie di articoli andremo a discutere le moderne tecnologie di sviluppo e a scoprire cosa c’è dietro: partiamo subito!

A4 19

Cos'è un Container?

Un container è un pacchetto software che contiene tutte le librerie e le dipendenze necessarie per eseguire l’applicazione o il servizio in esso incapsulato.
La containerizzazione è resa possibile da tre componenti principali:

  • Kernel Namespaces: funzionalità del kernel Linux che permette l’isolamento tra container. Esistono diverse tipologie di kernel namespaces, ognuna con le proprie caratteristiche, come ad esempio:
    • Network namespace – attribuisce ad ogni container uno stack di rete differente (indirizzi IP, tabelle di routing, Firewall, ecc.)
    • PID namespace – attribuisce ad ogni container una lista processi isolata da altri container: sarà possibile avere 2 processi distinti con lo stesso process identifier (PID)
  • Control Groups (cgroups): feature del kernel Linux che permette di gestire priorità e limiti in termini di utilizzo delle risorse (CPU, memoria RAM, disco, rete) dei vari container.
  • Container Runtime: software responsabile della gestione del ciclo di vita dei container. Docker è sicuramente la container runtime più famosa, tant’è che spesso, la parola Docker viene utilizzata (in modo errato) come sinonimo di container, ma non è l’unica disponibile; tra le altre container runtime (o engine) abbiamo ContainerD e CRI-O.

Possiamo quindi rappresentare i container e l’infrastruttura che li ospita come segue:

Container Rappresentazione visiva

Container VS Macchine Virtuali - Differenze

Se prendiamo come riferimento l’illustrazione precedente e la contrapponiamo a quella delle macchine virtuali (VM), con cui molto probabilmente hai più familiarità, possiamo notare delle similitudini:

Container VS Macchina Virtuale

Osserviamo come entrambe le soluzioni, container e VM, offrono la possibilità di far girare applicazioni, con le proprie dipendenze e librerie, in ambienti piuttosto isolati.

Tuttavia, le analogie si fermano qua, infatti le macchine virtuali e i container agiscono a 2 diversi livelli: le prime virtualizzano l’hardware, messo a disposizione dal server, tramite l’hypervisor; mentre i secondi virtualizzano un sistema operativo.

Questo porta molteplici vantaggi a favore della containerizzazione, ad esempio non avendo lo strato del Guest OS (sistema operativo che viene eseguito su una VM), i container risultano molto più leggeri sia in termini di dimensioni, tipicamente qualche megabyte contro le decine e decine di gigabyte di una macchina virtuale, sia in termini di esecuzione; infatti, avviare un container richiederà pochi secondi perché verrà lanciata effettivamente solo l’applicazione, a differenza di una VM dove viene avviato un intero sistema operativo. Tra gli altri vantaggi possiamo elencare:

  • Sviluppo agile (DevOps, microservizi)
  • Maggiore portabilità
  • Minor numero di sistemi operativi da gestire e mantenere
  • Scalabilità
  • Ottimizzazione delle risorse

Conclusione:

In sintesi, la containerizzazione è una tecnologia in forte crescita che permette di isolare e gestire in modo efficiente le applicazioni e i servizi.

I container sono pacchetti software autonomi che includono tutte le dipendenze necessarie per l’esecuzione dell’applicazione, rendendoli leggeri e altamente portatili.

A differenza delle macchine virtuali, che virtualizzano l’hardware del server, i container virtualizzano il sistema operativo, offrendo numerosi vantaggi come la maggiore agilità nello sviluppo, la portabilità, la scalabilità e l’ottimizzazione delle risorse.

Con l’aumento della popolarità della containerizzazione e delle architetture a microservizi, acquisire competenze in questo settore diventa sempre più importante per gli sviluppatori e gli ingegneri IT.

Condividi l’articolo!!


Scopri i nostri corsi!

Formazione Cloud-Native in presenza o da remoto
Abdelah Sato
Abdelah Sato

DevOps Instructor & Engineer
Sono un System Engineer, istruttore e consulente nell’ambito delle tecnologie di virtualizzazione (VMware) e container (Docker & Kubernetes) con una smodata passione per il problem solving. Nel corso degli anni ho maturato esperienza nella gestione di sistemi informatici e nel campo dell’automazione attraverso l’utilizzo di strumenti quali Ansible, Terraform e VMware Automation.