Negli ultimi anni, Docker si è guadagnato un posto importante nella vita quotidiana degli sviluppatori. Vediamo di fare una panoramica di questo tool e capire come funziona Docker dietro le quinte.
Caratteristiche di Docker
Una delle funzionalità più importanti offerte da Docker è il tempo di avvio istantaneo. Un container Docker può essere avviato in una frazione di tempo minima, un’operazione velocissima che niente ha a che vedere con i minuti che ci vogliono per l’avvio di una macchina virtuale.
Docker utilizza le funzionalità del kernel Linux per l’avvio e l’interazione con i container. A causa di questa dipendenza dal kernel Linux, quando Docker viene eseguito su altri sistemi come MacOs, viene avviato un ulteriore livello di virtualizzazione, che normalmente viene “mascherato” da Docker for Mac (come utente utilizzatore non noterai la differenza, se non in termini di velocità ).
Cos’è la virtualizzazione?
Docker è uno strumento utilizzato per eseguire container: I container sono simili alle macchine virtuali pertanto simulano una macchina in esecuzione all’interno del tuo computer reale. Se non hai mai utilizzato VirtualBox o VMware, ad esempio potresti avere familiarità con le macchine virtuali utilizzate per eseguire Windows all’interno di un Mac.
Una macchina virtuale simula tutte le parti di un computer reale, inclusi lo schermo e il disco rigido, che sul computer reale (spesso indicato come host) è solo un grande singolo file (chiamato disco rigido virtuale). Su una macchina virtuale (o VM) che esegue Windows, il disco rigido virtuale contiene tutto il codice del sistema operativo Windows, che può essere di diversi gigabyte.
Windows nella VM non sa di essere in esecuzione all’interno di una simulazione e dunque in sostanza all’interno di un vero computer, “pensa” solo di essere egli stesso il sistema operativo principale. Docker per intenderci, come VirtualBox, “virtualizza” un sistema operativo all’interno di un sistema operativo host.
Qual è la differenza tra una VM e un container?
L’utilizzo di una macchina virtuale può essere impegnativo per un processore. Nell’esempio di prima, non solo l’host Mac esegue tutte le attività in background di Mac OS, ma esegue anche tutte le attività in background di Windows, che costituiscono tutte un programma pesante per l’host.
Il sistema operativo host ha il controllo sulla potenza di elaborazione che è in grado di fornire ad un programma ed è proprio per questo motivo che le macchine virtuali spesso funzionano molto lentamente.
Può essere dunque particolarmente faticoso eseguire più VM contemporaneamente, perché ciò significherebbe chiedere ad un computer di eseguire diversi sistemi operativi contemporaneamente mantenendo giganteschi dischi rigidi virtuali contenenti diversi sistemi operativi.
L’esecuzione di più istanze dello stesso sistema operativo è spesso ridondante e non necessaria, inoltre rischia di vanificare l’esecuzione di un sistema operativo virtualizzato.
I container invece condividono risorse ridondanti, come alcuni file del sistema operativo di grandi dimensioni, e le risorse hardware vengono assegnate dinamicamente a seconda della necessità di ogni container sul momento.
In conclusione
I Docker container sono molto utili per creare ambienti isolati in cui eseguire programmi separati senza interferire tra loro, infatti facilitano la vita dello sviluppatore che si troverà a lavorare in un ambiente isolato senza interferire con la configurazione dell’host.
Se desideri saperne di più su Docker, puoi leggere “How to get started with Docker“, per scoprire come scrivere un Dockerfile, per creare immagini personalizzate e per capire come utilizzare Docker Compose per orchestrare diversi container Docker.
Read related articles
Kubernetes Cloud: servizi Cloud per Kubernetes, mini guida pratica
Kubernetes Cloud: vediamo da vicino Amazon Elastic Kubernetes Service (EKS) Google Kubernetes Engine (GKE) e Servizio Azure Kubernetes (AKS) I
Come funziona Kubernetes: funzionamento e struttura
Come funziona Kubernetes: mini guida per capire il funzionamento di uno dei tools più importanti per un developer oggi Come
Docker vs Kubernetes: vediamo in cosa differiscono
Docker vs Kubernetes: vediamo in cosa differiscono e perché a volte si tende a far confusione Spesso sentiamo chiedere in