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. Vengono inoltre descritte alcune delle sfide 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 iniziare, il team di sviluppo sviluppa e testa il software in un ambiente di sviluppo. Successivamente, il software viene distribuito in un ambiente qa (Quality Assurance), seguito dalla preproduzione e quindi da un ambiente di produzione finale.

Il processo di sviluppo software presenta diverse sfide da considerare:

  • Gestione degli ambienti di hosting

    Tutti gli ambienti richiedono attività di gestione del software e dell'hardware. È necessario assicurarsi che sia il software installato che l'hardware configurato in ognuno sia lo stesso. È anche necessario configurare aspetti come l'accesso alla rete, l'archiviazione dei dati e la sicurezza per ogni ambiente in modo coerente e facilmente riproducibile.

  • Continuità nella distribuzione del software

    La distribuzione di applicazioni nei nostri ambienti deve essere 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 isolata da altre applicazioni eseguite nello stesso hardware. Si vuole eseguire più di un'applicazione per ogni server per sfruttare al meglio le risorse senza compromettere l'una l'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 consentono di risolvere queste sfide, vengono illustrati alcuni concetti e viene esaminata una breve panoramica dell'architettura Docker.

Che cos'è un contenitore?

Un contenitore è un ambiente isolato che consente di compilare ed eseguire pacchetti software. Questi pacchetti software includono il codice e tutte le dipendenze per l'esecuzione di applicazioni in qualsiasi ambiente di elaborazione. Questi pacchetti vengono chiamati immagini 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.

Diagramma che mostra una panoramica generale dell'architettura Docker.

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 sull’interfaccia utente grafica (GUI) 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

Sono disponibili diversi oggetti creati e configurati per supportare le distribuzioni di contenitori. Questi oggetti includono reti, volumi di archiviazione, plug-in e altri oggetti servizio. Questo modulo non menziona tutti questi oggetti, ma è consigliabile tenere presente che questi oggetti sono elementi che è possibile creare e distribuire 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.