Docker

Cos’è Docker?

Basata sulla tecnologia open source, la piattaforma Docker consente agli sviluppatori di realizzare applicazioni in container, facilitandoli nella modifica e nell'aggiornamento delle applicazioni durante lo sviluppo.

Perché gli sviluppatori usano Docker?

Docker consente agli sviluppatori di confezionare ed eseguire applicazioni in un ambiente virtualizzato chiamato container. L’isolamento e la sicurezza consentono di eseguire più container in modo indipendente e simultaneo su un singolo sistema host. Docker fornisce i tool e la piattaforma necessari per gestire il ciclo di vita dei container.

Quali sono i vantaggi di Docker?

Lanciato nel 2013, Docker ha contribuito alla diffusione dell’uso della containerizzazione nello sviluppo software. Docker rende più semplice la realizzazione, la condivisione e l’esecuzione di applicazioni containerizzate. Consente la configurazione di un nuovo container in pochi minuti con tutte le dipendenze dell’applicazione. Le applicazioni containerizzate sono estremamente portabili, possono essere eseguite ovunque e su qualsiasi infrastruttura.

Perché i container sono utili?

I container sono leggeri, comprendono tutto il necessario per eseguire l’applicazione e astrarre il software dall’infrastruttura host. Sono isolati per una maggiore stabilità del sistema. Consentono di ripartire i grandi progetti tra diversi team di sviluppo, distribuendo il carico di lavoro e accelerando la distribuzione.

Come funziona Docker?

Per distribuire le sue funzionalità, Docker utilizza diverse caratteristiche del kernel Linux. Utilizza gli spazi dei nomi per fornire container. Durante l’esecuzione di un container, Docker crea un set di spazi dei nomi per tale container. Gli spazi dei nomi hanno il compito di fornire un livello di isolamento per i container. Ogni aspetto di un container viene eseguito in uno spazio dei nomi separato e il suo accesso è limitato a quello spazio dei nomi.

A differenza delle macchine virtuali (VM), che astraggono le risorse del sistema host a livello di hardware, Docker lo fa a livello di sistema operativo. Effettuando la virtualizzazione a questo livello, le istanze dei container risultano più leggere e più veloci rispetto alle VM.

Perché Docker?

Docker semplifica e accelera i flussi di lavoro di sviluppo software. Gli sviluppatori sono liberi di innovare con la loro scelta di tool, stack di applicazioni e ambienti di distribuzione in base alle esigenze specifiche di ogni progetto.

Docker è leggero e veloce, consente quindi di eseguire più carichi di lavoro sullo stesso sistema host, a differenza di quanto avviene con le VM basate su hypervisor. È adatto sia per ambienti ad alta densità sia per distribuzioni di piccole e medie dimensioni dove è necessario fare il massimo con meno risorse.

La piattaforma basata su container di Docker rende i carichi di lavoro estremamente portatili. I container Docker possono essere eseguiti sul dispositivo locale di uno sviluppatore, su hardware fisico on-premise o in data center in colocation, su istanze VM, su una piattaforma cloud pubblico o in un ambiente ibrido. Questa portabilità facilita inoltre la gestione dei carichi di lavoro in modo dinamico, aumentando o riducendo le applicazioni e i servizi secondo le esigenze aziendali, in tempo quasi reale.

Con Docker, gli sviluppatori possono configurare ambienti locali che corrispondono a quelli sui server attivi ed eseguire più ambienti di sviluppo con diverse configurazioni. Il test del software può essere effettuato rapidamente per verificare se le nuove modifiche funzioneranno correttamente in diverse combinazioni di ambienti e condizioni, supportando gli obiettivi di miglioramento continuo/sviluppo continuo (CI/CD).

Docker consente inoltre di ripartire i grandi progetti tra diversi team di sviluppo agili, ripartendo il carico di lavoro e accelerando la distribuzione. Questi flussi di lavoro DevOps efficienti possono aiutare le aziende a distribuire il software con maggiore frequenza, a riprendersi con maggiore rapidità dagli eventi avversi e a ridurre drasticamente i tassi di malfunzionamento.

Come viene distribuito e orchestrato Docker?

Gli utenti interagiscono con Docker attraverso un client. Questo client comunica con un processo in background che gestisce i container sull’host, noto come daemon Docker. Il daemon tiene traccia di tutto quello che riguarda l’ambiente Docker. 

Il Docker Engine, il core del sistema, è un'applicazione che utilizza un'architettura client-server ed è installato su una macchina host. L’host fornisce l’ambiente per avviare ed eseguire le applicazioni. Ospita il daemon Docker e i seguenti oggetti Docker:

  • Le immagini sono modelli binari di sola lettura usati per creare container. I loro metadati descrivono le funzionalità e le esigenze del container. Un’immagine può essere usata da sola per creare un container o personalizzata per aggiungere elementi supplementari ed estendere la configurazione attuale. Le immagini dei container possono essere condivise all’interno di un’organizzazione o con il pubblico e consentono la collaborazione tra sviluppatori.
  • I container sono definiti dalla loro immagine e da qualsiasi opzione di configurazione aggiuntiva fornita all’avvio (ad esempio, connettività di rete e opzioni di storage). I container hanno accesso solo alle risorse che sono definite nell’immagine, a meno che non venga definito un accesso aggiuntivo quando si crea l’immagine in un container.
  • Le reti consentono ai container isolati di un sistema di comunicare tra loro.
  • Lo storage dei dati in un container non è persistente per impostazione predefinita e viene eliminato una volta che il container non è più in funzione. Docker offre opzioni, come Data Volumes e Storage Plugin che consentono di trasferire o archiviare i dati in modo persistente.

Il client e il daemon Docker possono essere eseguiti sullo stesso sistema; in alternativa, un client Docker può essere collegato a un daemon Docker remoto. Un client Docker può anche comunicare con più daemon Docker. Il client e il daemon Docker comunicano attraverso un’API REST, su socket UNIX o un’interfaccia di rete.

Come viene usato Docker?

Docker semplifica e accelera i flussi di lavoro, offre molti vantaggi ai team di sviluppo software; in alcuni scenari, risulta particolarmente utile.

Adottare un’architettura composta da microservizi

Molte organizzazioni vogliono sostituire le loro applicazioni monolitiche legacy nell’ambito delle attività di trasformazione digitale. Mentre un’applicazione monolitica funziona come unità singola, un’architettura di microservizi si suddivide in una raccolta di unità indipendenti più piccole. Docker consente la containerizzazione di questi microservizi e semplifica la loro delivery e gestione. La containerizzazione fornisce ai singoli microservizi i loro ambienti di carichi di lavoro isolati, rendendoli distribuibili e scalabili in modo indipendente.

Spostare le applicazioni legacy nei container

Le applicazioni che non possono essere riarchitettate in microservizi, possono essere spostate nei container così come sono. L’uso di Docker per containerizzare queste applicazioni rende lo sviluppo e il test più efficienti, semplifica la distribuzione e il disaster recovery e consente l’esecuzione di più istanze dell’applicazione legacy senza conflitti con quelle più recenti.

Implementazione del machine learning (ML)

La distribuzione di modelli addestrati in produzione e su vasta scala è una delle problematiche più significative nello sviluppo del machine learning. Docker semplifica sia lo sviluppo, sia la distribuzione di applicazioni ML sfruttando piattaforme come TensorFlow per abilitare il supporto della GPU. La distribuzione delle applicazioni di ML risulta semplificata eseguendo i container su più macchine o sul cloud e gestendoli tutti con la tecnologia di orchestrazione.

Consolidamento dei server

Analogamente alle VM, le funzionalità di isolamento delle applicazioni di Docker consentono alle organizzazioni di risparmiare sui costi consolidando più server. Senza l’onere di eseguire più sistemi operativi (come è richiesto in un ambiente VM), Docker è in grado di fornire un consolidamento dei server più denso di quanto sia possibile con le VM.

Soluzioni HPE con Docker

Docker Enterprise Edition di HPE è un pacchetto di abbonamenti supportato a livello commerciale che offre tutti i componenti necessari per implementare container in qualsiasi ambiente. La Basic Edition di Docker comprende il motore e l’orchestrazione dei container. La Standard Edition consente di aggiungere diversi livelli di gestione di immagini e accessi; la Advanced Edition, consente di aggiungere l’analisi della sicurezza e il monitoraggio delle vulnerabilità.

Sfrutta la semplicità e la resilienza dello storage HPE quando inizi a eseguire il provisioning di volumi persistenti con pochi comandi. HPE Nimble Storage e gli array flash secondari, all-flash e ibridi HPE 3PAR forniscono prestazioni e scalabilità per ambienti container.

HPE Ezmeral Runtime è una piattaforma container di applicazioni unificata basata su Kubernetes open source e progettata per le applicazioni cloud native e non cloud native in esecuzione su qualsiasi infrastruttura, on-premise, su più cloud pubblici, in un modello ibrido o all'edge.

Questa piattaforma può essere erogata as-a-service con HPE GreenLake in base a un modello di pagamento in base all’uso. Gli ingegneri HPE eseguono l’installazione e la configurazione e HPE fornisce la gestione completa della tua soluzione, un unico punto di contatto per il supporto e un team tecnico che conosce il tuo ambiente e il tuo business. Con una versione hardware e software standardizzata, eviti una costosa distribuzione manuale e puoi averla a nel tuo data center in soli 14 giorni.