Get In Touch
Piazza Borgo Pila, 40/56
16129 Genova
[email protected]
[email protected]

Introduzione ai Docker

Prima di parlare di Docker, introduciamo brevemente il concetto di contenitore.

Il contenitore è un approccio allo sviluppo del software in cui un’applicazione o un servizio, le relative dipendenze e la relativa configurazione (astratte come file manifesto di distribuzione) vengono assemblati insieme come immagine del contenitore.
È quindi possibile testare l’applicazione in contenitori come un’unità e distribuirla come un’istanza dell’immagine del contenitore nel sistema operativo host.
 

  • I contenitori fungono da unità standard di distribuzione software in grado di contenere codice e dipendenze diversi.
  • Distribuire applicazioni tra ambienti diversi con modifiche minime se non inesistenti. 
  • Consentono di isolare le applicazioni una dall’altra in un sistema operativo condiviso.
  • Ogni contenitore può eseguire un intero servizio o applicazione Web.
  • La scalabilità orizzontale viene rapidamente garantita con la creazione di nuovi contenitori per le attività a breve termine.
  • Dal punto di vista dell’applicazione, la creazione di un’istanza di un’immagine (corrispondente alla creazione di un contenitore) è analoga alla creazione di un’istanza di un processo, come un servizio o un’app Web.

I contenitori offrono vantaggi in termini di isolamento, portabilità, flessibilità, scalabilità e controllo nel flusso di lavoro dell’intero ciclo di vita dell’applicazione. Il vantaggio più importante è l’isolamento dell’ambiente fornito tra sviluppo e operazioni

Docker 

docker

Docker è un progetto open source per automatizzare la distribuzione di app come contenitori portabili e autosufficienti che possono essere eseguiti nel cloud o in locale.
Docker è anche una
società che promuove e sviluppa questa tecnologia, collaborando con fornitori cloud, Linux e Windows, inclusa Microsoft. 

Contenitori di immagini Docker possono essere eseguiti anche in modalità nativa in Linux e Windows. Tuttavia, le immagini Windows possono essere eseguite solo negli host Windows e le immagini Linux possono essere eseguite in host Linux e in host Windows (con una macchina virtuale Linux Hyper-V, per il momento), dove con host si intende una macchina virtuale o un server. 

Le macchine virtuali

A fine anni ’90 si è iniziato sfruttare in modo esteso i software in grado di astrarre le componenti hardware di client e server – risorse fisiche reali (Cpu, schede di rete, storage, Gpu) disponibili come risorse virtuali, cioè a livello logico in macchine virtuali. 

Non c’è bisogno di gestire “fisicamente” le risorse di storage per far girare sistemi operativi diversi, è possibile installare un sistema operativo scelto indipendente da quello nativo e le relative applicazioni scritte per quel sistema operativo.

L’utente finale guadagna così la disponibilità di ambienti diversi (emulazione di piattaforma) con la stessa facilità con cui si apre su un computer una nuova applicazione, in una nuova finestra, e di farlo senza riavviare il computer/server e senza dedicare risorse fisiche specifiche ad ognuno dei sistemi operativi.
Il “motore” che rende possibile questa suddivisione di risorse è denominato hypervisor (o anche VM monitor).
Ogni macchina virtuale prevede un sistema operativo completo, un’immagine di esso che incide sull’utilizzo della memoria e delle altre risorse.

Docker è un sistema di virtualizzazione vera e propria del sistema operativo, non dell’hardware. 

I docker condividono il kernel dell’OS sull’host in sola lettura e solo per le informazioni che servono e si avviano in modo molto veloce.

Ugualmente a come fanno le VM offrono uno spazio isolato di esecuzione pur sfruttando l’hardware condiviso. Allo stesso tempo, proprio come accadde per la virtualizzazione con VM, questa sorta di “virtualizzazione al quadrato” riduce ulteriormente i costi perché i container condividono un unico sistema operativo (si deve quindi provvedere al buon funzionamento non di “enne” macchine accese ognuna con un OS).

Non solo, attraverso i container è possibile gestire in modo granulare le risorse di calcolo – da qui i cosiddetti microservizi.

Spieghiamo: invece di pacchettizzare in senso logico un’app (astratta rispetto all’ambiente in cui è eseguita) è infatti possibile containerizzare anche solo un servizio di questa. In questo modo è possibile agli sviluppatori suddividere ulteriormente le risorse in microservizi, a vantaggio della fluidità di esecuzione delle applicazioni. 

Confronto tra VM e Docker

componenti docker

Criteri  VM  Docker 
Supporto OS  Occupa meno spazio in memoria  Meno spazio 
Boot-up time  Lungo  Corto 
Perfomance  Eseguire + vm rallenta performance (ambiente instabile)  Migliori prestazioni perchè ospitate su una singola macchina docker 
Scalabilità  Difficile  Semplice 
Portabilità  Problemi di compatibilità  Facile 
Efficienza  bassa  alta 

Docker client e server 

docker client server

  • Dal terminale si accede al client e un host docker esegue il demone e il registro 
  • Un utente costruisce le immagini del docker ed esegue i contenitori passando i comandi dal client al server 
  • Docker client o Docker è un applicazione client-server che costruisce ed esegue i contenitori usando componenti Docker 
  • Rest API sono il modo di comunicazione primario tra docker client e docker demone 
  • Docker client è il servizio per eseguire comandi (run, docker image)  
  • Docker engine o docker è il programma che crea ed esegue il contenitore dal file immagine 
  • Docker demone è un server che interagisce con il sistema operativo ed esegue tutti i servizi,  è in ascolto delle richieste rest API e fa le operazioni 

Docker Immagine

  • Template con istruzioni usate per costruire i contenitori 
  • Costruita con un docker file 
  • Salvata in un docker hub o repository -> per permettere ad altre persone di accedere  

docker immagine

Docker contenitore 

  • Pacchetto software eseguibile indipendente che include le applicazioni e le loro dipendenze 
  •  Molti contenitori sono eseguiti sulla stessa infrastruttura e condividono il SO con gli altri contenitori 
  • Ogni applicazione è eseguita isolata, protetta

Registro 

  • Per accedere alla stessa immagine da più sviluppatori sparsi nel mondo   
  • Open source lato server servizio che ospita e distribuisce immagini 
  • Docker ha il suo Docker Hub 
  • Repo pubbliche possono essere usate per ospitare le immagini che possono essere utilizzate da chiunque 
  • Repo private permetto di non di tenere  le immagini non pubbliche 
  • Comandi pull e push per interagire con il registro 
  • Pull per prendere l’immagine dalla repo 
  • Push per aggiornare l’immagine  

Contenitore

  • Possono essere eseguiti anche in modalità nativa in Linux e Windows.
  • Immagini Windows possono essere eseguite solo negli host Windows
  • Immagini Linux possono essere eseguite in host Linux e in host Windows (con una macchina virtuale Linux Hyper-V, per il momento), dove con host si intende una macchina virtuale o un server. 
  • Pacchetto software eseguibile indipendente che include le applicazioni e le loro dipendenze 
  • Molti contenitori sono eseguiti sulla stessa infrastruttura e condividono il SO con gli altri contenitori

Docker compose

  • Docker compose è uno strumento che permette di definire ed eseguire applicazioni multi-contenitore.
  • Usi un file YAML per configurare i servizi dell’applicazione.
  • Isola gli ambienti tra di loro.

Altri metodi di orchestrazione

Vuoi saperne di più?

La metodologia DevOps: che cos'è e come applicarla

Leave a Reply

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *