Un container non è una macchina virtuale né un’entità separata dal sistema operativo. Dal punto di vista del kernel un container è costituito da uno o più processi Linux avviati sul sistema host isolati tramite namespace e limitati tramite cgroup ed eseguiti direttamente dal kernel.
Un processo è un'istanza di un programma in esecuzione creato e gestito direttamente dal kernel Linux: nasce quando il kernel Linux carica un file eseguibile in memoria e ne avvia l’esecuzione. Quando un comando viene eseguito, il kernel crea un processo assegnandogli un identificativo univoco (PID), le risorse necessarie (CPU, memoria, I/O) e uno stato di esecuzione.
I container sono oggi al cuore di molti ambienti di sviluppo e produzione. Ma cosa succede sotto il cofano?
I namespaces sono una funzionalità del kernel Linux che permette di suddividere e isolare le risorse del sistema. In questo modo il kernel è in grado di separare i processi tra loro facendo sì che ciascun gruppo abbia una propria visione del sistema indipendente dagli altri.
I cgroups (Control Groups) sono una funzionalità del kernel Linux che permette di controllare, limitare e monitorare l’utilizzo delle risorse da parte dei processi come CPU, memoria RAM, I/O su disco e numero di processi generati. In questo modo si evita che un singolo programma possa rallentare o bloccare l’intero sistema.
I processi vengono organizzati all’interno di una gerarchia gestita direttamente dal kernel.
Nel modello tradizionale di Linux essere root significava avere controllo totale sul sistema, ma con l’introduzione del meccanismo delle capabilities questo approccio è stato superato permettendo di suddividere i privilegi amministrativi in permessi più piccoli e specifici. Analizziamo l’evoluzione dal modello basato su UID 0 e bit setuid fino alle capabilities, facendo riferimento alla guida ufficiale capabilities(7), per comprendere come il kernel decida realmente se un’operazione è consentita oppure no.
Ogni operazione eseguita da un processo Linux passa attraverso il kernel tramite una system call. Quando un processo vuole aprire un file, creare un processo o usare la rete, deve sempre chiedere al kernel tramite una chiamata di sistema.
Un container è come una piccola scatola dove l’applicazione vive da sola con tutto ciò che serve: se sposto la scatola da un computer all’altro funziona sempre.
Podman è un container engine creato da Red Hat che punta su sicurezza e semplicità di gestione. Fedora e tutte le distribuzioni basate su Red Hat ha una migliore compatibilità con Podman. Su Fedora è preinstallato e su tutte le altre distribuzioni Linux, MS Windows e Mac seguire la documentazione dell'installazione di Podman.
Quando inizi a studiare o usare i container prima o poi arriva la domanda su quale sistema operativo conviene installare Docker Engine? E allo stesso tempo qual è il sistema operativo più adatto per Podman?
Panoramica dei comandi base di Docker per la gestione delle immagini.
Panoramica dei comandi fondamentali di Docker per la gestione delle immagini. Vedremo come elencarle, scaricarle, crearle, rimuoverle e comprenderne il ruolo nel ciclo di vita dei container.
In questa sezione vedremo come Docker gestisce i dati dei container tramite bind mounts e volumi. Questi meccanismi permettono di collegare directory dell’host ai container o di salvare i dati in modo persistente, superando la natura effimera del filesystem interno ai container. Imparerai quando e perché usare i bind mount (collegamenti diretti a cartelle dell’host) oppure i volumi gestiti da Docker, e i comandi base per crearli e utilizzarli nei tuoi container.
Il networking in Docker gestisce la comunicazione tra i container, tra i container e l’host, e consente sia l’accesso a Internet sia la raggiungibilità dei servizi dall’esterno.
Un Dockerfile è un file di testo che definisce passo dopo passo come creare un’immagine Docker personalizzata, partendo da un’immagine già esistente.
Docker Compose è uno strumento che ti permette di far partire più container insieme come se fossero un’unica applicazione.


