Che cos'è Docker?

Completato

Prima di iniziare una rapida presentazione dei contenitori Docker, si vedrà in che modo il team sviluppa e distribuisce le applicazioni. Verranno descritte brevemente anche alcune delle sfide che vengono affrontate dai team.

Il processo di sviluppo e gestione delle applicazioni nell'azienda include in genere uno o più team. È in genere presente un team di sviluppo che crea il software e un team operativo responsabile della distribuzione di queste applicazioni. Il team operativo ha inoltre il compito di gestire l'infrastruttura che ospita le applicazioni.

Ad esempio, si supponga di sviluppare un portale per la tracciabilità degli ordini che verrà usato dai diversi punti vendita dell'azienda per cui si lavora. Durante il processo di sviluppo e pubblicazione, le applicazioni vengono ospitate in più ambienti. Per prima cosa, il team di sviluppo esegue le attività di sviluppo e test del software in un ambiente di sviluppo. Da qui, il software viene quindi distribuito in un ambiente di controllo di qualità (QA) e successivamente in un ambiente di pre-produzione per poi passare infine all'ambiente di produzione finale.

Uno scenario di questo tipo presenta diverse sfide che è necessario prendere in considerazione:

  • Gestione degli ambienti di hosting

    Tutti gli ambienti richiedono attività di gestione del software e dell'hardware. È necessario assicurarsi che sia il software installato sia l'hardware configurato siano identici in ogni ambiente. Si devono inoltre configurare aspetti quali l'accesso alla rete, l'archiviazione dei dati e la sicurezza per ogni ambiente in maniera coerente e facilmente riproducibile.

  • Continuità nella distribuzione del software

    La distribuzione delle applicazioni negli ambienti deve essere eseguita in modo coerente. Ogni pacchetto di distribuzione deve includere tutti i pacchetti di sistema, i file binari, le librerie, i file di configurazione e altri elementi che assicurano il corretto funzionamento di un'applicazione. È anche necessario verificare che tutte queste dipendenze corrispondano all'architettura e alle versioni del software.

  • Uso efficiente dell'hardware

    Ogni applicazione distribuita deve essere eseguita in modo che rimanga isolata dalle altre applicazioni in esecuzione sullo stesso hardware. L'obiettivo è eseguire più applicazioni per ogni server per sfruttare al meglio le risorse senza comprometterne una a favore di un'altra.

  • Portabilità delle applicazioni

    La portabilità delle applicazioni è fondamentale per diversi motivi. Potrebbe verificarsi un errore nell'ambiente di hosting oppure potrebbe essere necessario ridimensionare l'applicazione. In entrambi i casi, il possibile risultato è una ridistribuzione del software in un nuovo ambiente. Si vuole spostare il software da un host a un altro anche se l'infrastruttura sottostante è diversa. Uno spostamento di questo tipo deve avvenire il più rapidamente possibile per ridurre il tempo di inattività per i clienti.

Prima di esaminare le funzionalità di Docker che sono utili per affrontare queste sfide, si approfondiranno alcuni concetti e si vedrà una breve panoramica dell'architettura di Docker.

Che cos'è un contenitore?

Un contenitore è un ambiente liberamente isolato che consente di creare ed eseguire pacchetti software. Nei pacchetti sono inclusi il codice e tutte le dipendenze per eseguire le applicazioni in modo rapido e affidabile in qualsiasi ambiente informatico. Un pacchetto di questo tipo è definito immagine del contenitore.

L'immagine del contenitore diventa l'unità usata per distribuire le applicazioni.

Che cos'è la containerizzazione del software?

La containerizzazione del software è un metodo di virtualizzazione del sistema operativo usato per distribuire ed eseguire contenitori senza usare una macchina virtuale. I contenitori possono essere eseguiti sull'hardware fisico, sul cloud, sulle macchine virtuali e su più sistemi operativi.

Che cos'è Docker?

Docker è una piattaforma di containerizzazione che consente di sviluppare, distribuire ed eseguire i contenitori. Docker non usa un hypervisor ed è possibile eseguirlo sul computer desktop o portatile se si svolgono attività di sviluppo e test. La versione desktop di Docker supporta Linux, Windows e macOS. Per i sistemi di produzione, Docker è disponibile per gli ambienti server, tra cui molte varianti di Linux e Microsoft Windows Server 2016 o versione successiva. Docker è supportato da molte piattaforme cloud, tra cui Azure.

Architettura di Docker

La piattaforma Docker è costituita da diversi componenti usati per creare, eseguire e gestire le applicazioni containerizzate.

Motore Docker

Il motore Docker è costituito da diversi componenti configurati come implementazione client-server in cui il client e il server vengono eseguiti contemporaneamente sullo stesso host. Il client comunica con il server usando un'API REST, che consente al client di comunicare anche con un'istanza del server remoto.

Diagram showing a high-level overview of the Docker architecture.

Alcune frecce mostrano le comunicazioni tra il server Docker, i contenitori in esecuzione e le immagini del contenitore archiviate. Queste frecce indicano il modo in cui il server Docker carica le immagini del contenitore archiviate e gestisce i contenitori in esecuzione.

Il client Docker

Esistono due alternative per il client Docker: un'applicazione da riga di comando denominata docker o un'applicazione basata su Interfaccia utente grafica denominata Docker Desktop. L'interfaccia della riga di comando e Docker Desktop interagiscono con un server Docker. I comandi docker dall'interfaccia della riga di comando o da Docker Desktop usano l'API REST di Docker per inviare istruzioni a un server locale o remoto e fungono da interfaccia principale per la gestione dei contenitori.

Il server Docker

Il server Docker è un daemon denominato dockerd. Il daemon dockerd risponde alle richieste del client tramite l'API REST di Docker e può interagire con altri daemon. Il server Docker è anche responsabile della verifica del ciclo di vita dei contenitori.

Oggetti Docker

È possibile creare e configurare diversi oggetti per supportare le distribuzioni dei contenitori, inclusi volumi di archiviazione, reti, plug-in e altri oggetti di servizio. Questi oggetti non verranno illustrati in questo modulo, ma è opportuno tenere presente che è possibile creare e gestire oggetti Docker in base alle esigenze.

Docker Hub

Docker Hub è un registro contenitori Docker di tipo SaaS (Software-as-a-Service, software come un servizio). I registri Docker sono repository che consentono di archiviare e distribuire le immagini di contenitore create. Docker Hub è il registro pubblico predefinito che viene usato da Docker per la gestione delle immagini.

Tenere presente che è possibile creare e usare un registro Docker privato oppure usare una delle numerose opzioni offerte dai provider di servizi cloud. È ad esempio possibile usare il servizio Registro Azure Container per archiviare i immagini del contenitore da usare in diversi servizi abilitati per contenitori di Azure.