Docker: i container rendono il deployment riproducibile

Docker rende accessibili le tecnologie di containerizzazione Linux — namespace, cgroup e filesystem union mount — con Dockerfile, immagini e registry per un deployment riproducibile.

Open SourceWeb Open SourceDockerContainerDevOpsLinuxNamespaces

Il problema del deployment

Nel 2013 il deployment di un’applicazione in produzione è ancora un processo fragile. Le differenze tra l’ambiente di sviluppo e quello di produzione — versioni di librerie, configurazioni del sistema operativo, dipendenze implicite — causano il classico problema del “funziona sulla mia macchina”. Le macchine virtuali risolvono parzialmente il problema, ma al costo di replicare un intero sistema operativo per ogni applicazione, con tempi di avvio misurati in minuti e consumi di risorse significativi.

Solomon Hykes presenta Docker al PyCon 2013 con una demo di cinque minuti che cambia la prospettiva dell’industria: un’applicazione impacchettata con tutte le sue dipendenze, eseguita in isolamento, avviata in meno di un secondo.

Tecnologie Linux rese accessibili

Docker non inventa nulla di nuovo a livello di kernel. I namespace Linux isolano i processi: ogni container vede il proprio filesystem, i propri processi, la propria rete, senza interferire con gli altri. I cgroup (control group) limitano le risorse — CPU, memoria, I/O — che un container può consumare. Il union mount filesystem sovrappone layer di filesystem in sola lettura con un layer scrivibile in cima, permettendo di condividere i layer comuni tra container diversi.

Queste tecnologie esistono da anni, ma utilizzarle direttamente richiede competenze specialistiche. Docker le rende accessibili attraverso un’interfaccia a riga di comando semplice e un formato di configurazione dichiarativo.

Dockerfile, immagini e registry

Un Dockerfile è un file di testo che descrive come costruire un’immagine: partendo da un’immagine base (un sistema operativo minimale), ogni istruzione aggiunge un layer — installazione di pacchetti, copia di file, configurazione di variabili d’ambiente. L’immagine risultante è immutabile e versionata.

Le immagini vengono distribuite attraverso un registry — un archivio centralizzato da cui chiunque può scaricare immagini pronte all’uso. Il Docker Hub pubblico offre immagini ufficiali per i software più comuni: database, web server, linguaggi di programmazione. Un’organizzazione può ospitare un registry privato per le proprie immagini.

Il comando docker run scarica l’immagine (se non presente localmente), crea un container e lo avvia. L’applicazione si comporta esattamente allo stesso modo su qualsiasi macchina che esegue Docker, indipendentemente dal sistema operativo host.

Colmare il divario tra sviluppo e produzione

Docker riduce il deployment a un’operazione deterministica: la stessa immagine che funziona sul portatile dello sviluppatore funziona in staging e in produzione. Le dipendenze sono esplicite, l’isolamento è garantito, la riproducibilità è intrinseca nel formato. Per i team di sviluppo e operazioni, Docker elimina un’intera categoria di problemi legati alle differenze ambientali.

Link: docker.com

Vuoi supporto? Sei sotto attacco? Stato dei servizi
Vuoi supporto? Sei sotto attacco? Stato dei servizi