Come funziona Docker: struttura e funzionamento

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.

come funziona Docker

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.

Come utilizzare Docker Compose

Docker Compose è uno degli strumenti più utili per gli sviluppatori e i sys admin. La maggior parte delle posizioni lavorative in ambito IT infatti richiedono la conoscenza di Docker e di Docker Compose. Senza dubbio, sapere come utilizzare queste tecnologie costituirà un vantaggio nel proseguimento della tua carriera.

Cos’è Docker compose?

In poche parole, Docker Compose è uno strumento che ti consente di gestire più Docker containers. Ricordi i micro-services, ossia il concetto di suddividere un’applicazione web in diversi servizi? Ebbene, questi servizi verranno eseguiti in singoli container che devono essere gestiti e devono essere messi in condizione di dialogare tra loro. Docker compose permette di fare proprio questo. (altro…)

Come creare un container con Docker

Continuiamo con le nostre guide dedicate a Docker. Oggi vediamo nel dettaglio un argomento di quelli davvero fondamentali per tutti coloro che si occupano di sviluppo web: Docker container.

Un container è l’istanza in esecuzione di un’applicazione in un ambiente isolato al quale vengono dinamicamente assegnate risorse per l’esecuzione. Il container al suo interno contiene l’applicazione da eseguire e tutto ciò di cui necessita: runtime, librerie, configurazione, ecc.

Qual è la differenza tra immagine e container?

L’immagine docker è un package statico, nel quale vengono pacchettizzate tutte le risorse necessarie all’esecuzione di un’applicazione. (altro…)

Come creare un ambiente Docker ottimale

Per lo sviluppo di un software è necessario avere a disposizione un ambiente locale con tutti i servizi a disposizione per la corretta esecuzione dell’applicazione che si sta sviluppando.

Ad esempio, se si sta sviluppando un’applicazione web con Symfony, sarà necessario avere a disposizione un webserver come Apache o Nginx, un interprete PHP e probabilmente un database sul quale salvare i dati, come Postgre o MySql. (altro…)

Come creare un package con Docker

Quando si parla di package, generalmente ci si riferisce a una parte di software o di librerie raggruppate per essere riutilizzate in scala. Un package infatti può essere ad esempio utilizzato da più applicazioni tramite l’importazione o l’estensione del package stesso.

Docker è un tool che renderà più semplice la tua vita di developer, stiamo parlando di un progetto open source in grado di rendere automatico il deployment di applicazioni all’interno di contenitori software, in pratica una piattaforma che ti consentirà di creare, testare e distribuire applicazioni tramite container. (altro…)

Come deployare con Docker

Docker è una piattaforma che tramite un sistema di virtualizzazione permette di eseguire programmi in pacchetti chiamati container.

I container sono isolati l’uno dall’altro e includono tutte le risorse software, compreso il sistema operativo, e dunque permettono l’esecuzione dell’applicazione.

Deploy Docker: eseguire il deploy di un’applicazione con Docker usando Docker Image

Per eseguire il deploy di un’applicazione con Docker, è necessario prima di tutto avere a disposizione un’immagine. (altro…)

Come installare Docker: mini guida pratica

Installare Docker sulla propria macchina per creare un ambiente di sviluppo è davvero un’operazione molto semplice. Vediamo come installarlo su Windows, Mac e Ubuntu.

Come installare Docker: Windows, Mac e Ubuntu

In questa mini guida vediamo come installare Docker su Windows, Mac e Ubuntu. (altro…)