Container: Che cos’è, come funziona e architettura di Docker in informatica

Container: Che cos’è, come funziona e architettura di Docker in informatica

Docker

Docker è la piattaforma che permette lo sviluppo di applicazioni basate su container Linux. Lo strato “Linux containers” crea un’ulteriore livello di astrazione tra l’applicativo e il sistema operativo. La virtualizzazione dei sistemi operativi è eseguita in modo da ottimizzare l’utilizzo delle risorse, così facendo l’hardware condiviso resta libero la maggior parte del tempo tranne per alcuni momenti dovuti all’utilizzo di applicazioni.

Docker container risolve il problema delle copie complete dei sistemi operativi, che risultavano dispendiose nell’avvio di un’applicazione e per lo più inutilizzate visto che, per una corretta esecuzione, solo poche funzionalità del sistema operativo virtualizzato sono necessarie. Tramite appositi comandi, con i container è possibile specificare il sistema operativo e quali funzioni virtualizzare, riducendo le dimensioni dell’immagine finale. L’immagine del container risulterà così leggera, indipendente dal kernel fisico in cui viene eseguita e sicura. Il container in esecuzione sarà infatti isolato, pertanto un errore presente in un’immagine non graverà su gli altri container presenti.

Container: Che cos'è, come funziona e architettura di Docker in informatica

Architettura Docker

L’architettura Docker è basata sul pattern client-server. La comunicazione tra il client e il server, che svolge tutto il lavoro di build, run e deploy, avviene tramite delle api REST. Il client e il server possono trovarsi sia sullo stesso host che su diversi host, in quest’ultimo caso il client interagisce con un server remoto.

Fondamentalmente il framework Docker Engine è composto da un server che si occupa della gestione degli oggetti, un client e registri privati o remoti.

  • Docker Daemon: il componente principale della piattaforma Docker. È il server interno predisposto a girare a lungo termine. Il docker daemon, tramite delle api REST, è in grado di comunicare con gli utenti docker e altri docker daemon remoti. Infine è proprio questo processo che coordina gli oggetti docker come immagini, container, volumi o servizi.
  • Docker Client: si tratta di un’interfaccia che offre una serie di comandi per interagire con uno o più docker daemon.
  • Docker Registry: uno o più repository da utilizzare nella gestione delle immagini. Il registro predefinito è DockerHub, pubblico, ma si possono creare anche registri privati su cui fare pull o push delle immagini.

Architettura di Docker

Docker Images

Le immagini docker sono dei template funzionali per la creazione dei container. Ad esempio, un’immagine può essere creata partendo da un sistema operativo, aggiungendo solo alcune componenti come un server web o un applicazione java scritta dall’utente. Per costruire un’immagine personalizzata bisogna definire un Dockerfile, ovvero un file con una sequenza di comandi che definiscono l’immagine finale.

Docker Container

Un container è un’istanza che esegue un’immagine. Tramite api o, più comunemente, utilizzando i comandi della CLI è possibile creare, spostare, avviare, stoppare o cancellare un container. Da un container in esecuzione, installando o aggiornando alcuni package, è possibile salvare una nuova immagine. Ogni nuovo stato del container, se non salvato, all’atto della rimozione sarà perso. Nella rete docker ogni container è ben isolato dagli altri, ma è possibile modificare e controllare quanto e come tali container devono essere isolati tra loro.

Docker Swarm

Una volta che i container vengono creati e avviati, il docker engine mette a disposizione un componente per l’orchestrazione e la gestione del cluster, docker Swarm. Uno “swarm” consiste di una serie di host che eseguono docker in modalità swarm. Ogni host può agire da swarm manager o worker, ma anche coprire entrambi i ruoli. Tutti gli host all’interno dello swarm concorrono a conservare uno stato coerente del cluster. Ad esempio, se un nodo worker non è più disponibile, lo swarm manager demanderà il task ad un altro nodo worker disponibile. Docker swarm permette anche la configurazione al volo dei servizi, così facendo un servizio verrà stoppato, aggiornato e ricreato automaticamente con la nuova configurazione.

Un’altra caratteristica del docker swarm è che non tutti i container devono appartenere allo swarm. Un container che non deve comparire all’interno dello swarm, infatti, può essere schedulato su qualsiasi docker daemon, anche interno allo swarm, ma rimarrà isolato. Infine, grazie al docker swarm, è possibile configurare un cluster:

  • Decentralizzato: in fase di deploy non c’è bisogno di definire per ogni docker daemon, quali di questi saranno swarm manager e quali worker.
  • Scalabile: ogni servizio può essere replicato o ridotto a runtime.
  • Sicuro: le comunicazioni tra i nodi avvengono in mutual TLS.
  • Aggiornato: ad ogni aggiornamento lo swarm manager è in grado di eseguirlo in modo incrementale sui vari nodi e, in caso di errori, effettuare un roll-back istantaneo.
  • Bilanciato: viene esposto un servizio di load balancer che direziona il traffico all’interno del cluster sui vari nodi.

Pubblicato da Vito Lavecchia

Lavecchia Vito Ingegnere Informatico (Politecnico di Bari) Email: [email protected] Sito Web: https://vitolavecchia.altervista.org

Lascia un commento

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