Componenti principali di Docker: Docker Engine, Docker Networking e Docker Plugin

Componenti principali di Docker: Docker Engine, Docker Networking e Docker Plugin

Docker

Per comprendere a pieno in cosa consiste Docker è bene introdurre due problemi che ricorrono sistematicamente durante il ciclo di vita del software. Un’applicazione software è spesso legata a un ambiente di runtime ben preciso contenente le librerie necessarie al suo funzionamento. L’eterogeneità dei sistemi rende difficile la portabilità, in quanto non è garantito che un’applicazione possa trovare tutto ciò di cui necessita in un sistema differente da quello di sviluppo. Inoltre, la crescita incessante di applicazioni sempre più complesse e interconnesse alla rete fa sì che gli ambienti di runtime siano popolati da diversi moving parts. In questo scenario anche un semplice aggiornamento diventa difficoltoso dal momento che bisogna prestare attenzione a non infrangere la convivialità delle parti e a garantire la continuità del servizio; questi due problemi sono noti rispettivamente come il problema delle dipendenze e il problema del deployment. Tali necessità sono state il presupposto alla base sviluppo di Docker.
Docker è un software open-source con il quale pacchettizzare e deployare applicazioni all’interno di container. Ciò garantisce alle applicazioni di funzionare esattamente allo stesso modo in qualunque ambiente di runtime poiché tutto ciò di cui necessitano è racchiuso nel container. In realtà, lo scenario è ben più ampio: Docker è in grado di orchestrare infrastrutture basate su container finalizzate alla realizzazione di applicazioni distribuite. Sviluppato dalla dotCloud Inc. sin da subito ha riscosso un enorme successo posizionandosi tra le principali tecnologie di virtualizzazione. In questo articolo saranno analizzate le componenti organiche di Docker, focalizzando l’attenzione sulle qualità che lo hanno reso così popolare nel campo dello sviluppo software: l’interoperabilità (Docker Networking) e l’estensibilità (Docker Plugin).

Componenti principali di Docker: Docker Engine, Docker Networking e Docker Plugin

Docker Engine

Docker è basato su un’architettura client-server con tre attori protagonisti che nell’insieme sono definiti come Docker Engine.

  1. Docker API REST: formalizza il protocollo di comunicazione tra client e Docker Daemon.
  2. Docker Client: implementa la Command Line Interface (CLI) che traduce gli input da console in richieste REST compatibili con Docker API. Inoltre Docker Client può comunicare con più Daemon.
  3. Docker Daemon: gestisce gli oggetti Docker come immagini, container, reti e volumi. Un Daemon può anche comunicare con altri Daemon per soddisfare le richieste.

Questa scelta implementativa ha permesso una buona suddivisione delle responsabilità ma di fatto ha abbattuto le barriere della “località”, facendo sì che lo stesso Engine possa essere distribuito su host differenti.

Docker Networking

In sistemi distribuiti o di microservizi la rete diventa un tassello fondamentale per la comunicazione e la sincronizzazione tra le parti. Docker implementa la rete di un container con l’impiego del Net Namespace fornendo pertanto a ogni container un proprio stack di rete isolato dal sistema. Tuttavia, con appropriate regole di routing, è possibile indirizzare pacchetti al dispositivo di rete di un container. Inoltre, Net Namespace supporta solo dispositivi di rete virtuali. I “reali”, collegati direttamente all’hardware fisico della macchina, sono esclusivamente destinati al root namespace (il sistema host).
Docker offre una serie di network nativi con la possibilità d’installarne altri successivamente sotto forma di plugin.

Docker Plugin

L’ecosistema di Docker cresce in modo esponenziale e sempre più applicazioni necessitano di soluzioni personalizzate. Per il Team Docker la soluzione è stata offrire un’interfaccia col quale gli utenti potessero estendere Docker con strumenti di terze parti, conservando tuttavia la portabilità, la compattezza e la facilità d’uso.
“I plugin Docker sono estensioni out-of-process che aggiungono funzionalità al Docker Engine”. I plugin, dunque, consentono al Docker Engine di comunicare con servizi esterni che vanno a integrare le singole componenti come Volume e Network. Tali componenti, già presenti all’interno di Docker, potrebbero non essere adatte allo scopo di una specifica applicazione.
Docker, inoltre, va incontro alle esigenze degli utenti rilasciando la libreria go-pluginshelpers che formalizza il protocollo di comunicazione tra i plugin e il Docker Engine. La libreria è sviluppata nel linguaggio Go, nativo dell’implementazione Docker, e attualmente supporta le seguenti tipologie di estensione:

  • Authorization: Estende il meccanismo di autorizzazioni;
  • Network: estende la gestione delle reti;
  • Volume: estende il persistent storage;
  • IPAM: estende IP Address Management;
  • Graph: estende le immagini e il file system.

Pubblicato da Vito Lavecchia

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

Lascia un commento

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