Quando usare i contenitori Docker

Completato

Come descritto in precedenza, in Docker sono disponibili diverse funzionalità. Qui si esamineranno i vantaggi che Docker è in grado di offrire ai team operativi e di sviluppo, ma anche alcuni scenari in cui Docker potrebbe non rappresentare la scelta migliore.

Questi aspetti consentiranno di decidere se Docker è la soluzione ideale per la strategia di containerizzazione della propria azienda.

Come descritto in questo modulo, il team si trova di fronte a diverse sfide durante lo sviluppo e la pubblicazione del portale di tracciamento degli ordini. Il team è alla ricerca di una soluzione per:

  • Gestire con facilità gli ambienti di hosting.
  • Garantire la continuità nella distribuzione del software.
  • Assicurarsi di usare in modo efficiente l'hardware del server.
  • Consentire la portabilità delle applicazioni.

Docker offre una soluzione per tutte queste sfide. Si esamineranno qui tutti i vantaggi presentati finora.

Vantaggi di Docker

Usando Docker si accede immediatamente ai vantaggi offerti dalla containerizzazione.

Uso efficiente dell'hardware

I contenitori vengono eseguiti senza l'uso di una macchina virtuale. Come si è visto in precedenza, il contenitore si basa sul kernel dell'host per funzioni quali il file system, la gestione della rete, la pianificazione dei processi e la gestione della memoria.

Diagram contrasting VM resource use versus Docker resource use.

È possibile notare che una macchina virtuale richiede un sistema operativo installato per fornire le funzioni del kernel alle applicazioni in esecuzione all'interno della macchina virtuale. È opportuno tenere presente che il sistema operativo della macchina virtuale richiede anche spazio su disco, memoria e tempo di CPU. Rimuovendo la macchina virtuale e il requisito del sistema operativo aggiuntivo, si possono liberare risorse sull'host e usarle per l'esecuzione di altri contenitori.

Isolamento dei contenitori

I contenitori Docker forniscono funzionalità di sicurezza per l'esecuzione simultanea di più contenitori sullo stesso host senza che questi influiscano l'uno sull'altro. Come si è visto, è possibile configurare sia l'archiviazione dei dati sia la configurazione di rete per isolare i contenitori o condividere i dati e la connettività tra contenitori specifici.

È ora possibile confrontare questa funzionalità con l'uso di macchine virtuali.

Diagram that shows a physical host running multiple VMs.

Si supponga di avere un host fisico che esegue due macchine virtuali. Sono presenti tre applicazioni che devono rimanere isolate l'una dall'altra. Decidiamo di distribuire la prima applicazione nella macchina virtuale 1 e la seconda nella macchina virtuale 2 per mantenerle separate. Se a questo punto si decide di installare la terza applicazione, sarà necessario installare un'altra macchina virtuale per mantenere questo modello.

Portabilità delle applicazioni

I contenitori vengono eseguiti quasi ovunque, su desktop, server fisici, macchine virtuali e nel cloud. Questa compatibilità del runtime rende più semplice lo spostamento delle applicazioni incluse in contenitori tra diversi ambienti.

Poiché i contenitori sono risorse leggere, eliminano la necessità di lunghi tempi di avvio o arresto delle macchine virtuali. Questo aspetto rende più semplice e veloce la ridistribuzione e altri scenari di distribuzione, come l'aumento o la riduzione delle prestazioni.

Distribuzione delle applicazioni

Con Docker, il contenitore diventa l'unità usata per distribuire le applicazioni. In questo modo si ha la sicurezza di avere un formato di contenitore standardizzato usato dai team di sviluppo e da quelli operativi. Gli sviluppatori possono concentrarsi sulle attività di sviluppo e il team operativo può dedicarsi alla distribuzione e alla gestione del software.

È possibile usare il contenitore in ogni passaggio del sistema di distribuzione non appena il team di sviluppo ha rilasciato una build dell'applicazione. I contenitori sono i candidati ideali per l'integrazione continua e accelerano il passaggio dalla creazione alla produzione.

Gestione degli ambienti di hosting

L'ambiente dell'applicazione viene configurato internamente nel contenitore. Questo aspetto offre al team operativo la flessibilità per gestire molto più da vicino l'ambiente dell'applicazione. Il team può monitorare gli aggiornamenti del sistema operativo, applicare le patch di sicurezza in un'unica soluzione e distribuire il contenitore aggiornato in base alle esigenze.

Può inoltre gestire le applicazioni da installare, aggiornare e rimuovere senza influire sugli altri contenitori. Ogni contenitore è isolato e ha limiti di risorse assegnati separatamente rispetto agli altri contenitori.

Distribuzioni nel cloud

I contenitori Docker rappresentano l'architettura predefinita usata nei servizi di containerizzazione di Azure e sono supportati in molte altre piattaforme cloud.

Ad esempio, è possibile distribuire i contenitori Docker in Istanze di Azure Container, nel servizio app di Azure e nei servizi Azure Kubernetes. Ognuna di queste opzioni offre caratteristiche e funzionalità diverse.

Istanze di Azure Container, ad esempio, consente di concentrarsi sulla progettazione e la creazione di applicazioni senza doversi preoccupare della gestione dell'infrastruttura. Quando sono presenti molti contenitori da orchestrare, il servizio Azure Kubernetes semplifica la distribuzione e la gestione delle distribuzioni di contenitori su larga scala.

Quando non usare i contenitori Docker

I contenitori Docker offrono molti vantaggi, ma tenete presente che i contenitori potrebbero non essere adatti a tutte le esigenze. È necessario tenere presenti alcuni aspetti.

Sicurezza e virtualizzazione

I contenitori offrono un livello di isolamento, ma condividono un unico kernel del sistema operativo host, che può costituire un singolo punto di attacco.

Gli host Windows forniscono un modello di isolamento aggiuntivo in cui è possibile usare una macchina virtuale predefinita per isolare il contenitore a livello di hypervisor. Questa modalità è denominata modalità di isolamento Hyper-V e aggiunge un altro livello di sicurezza tra contenitori e host contenitore.

Inoltre, è necessario prendere in considerazione anche aspetti come l'archiviazione e le reti per garantire una valutazione completa della sicurezza. Ad esempio, tutti i contenitori useranno la rete bridge per impostazione predefinita e potranno accedere reciprocamente tramite l'indirizzo IP.

Non tutte le applicazioni otterranno un vantaggio dalla containerizzazione. In questi casi, può essere opportuno usare una macchina virtuale.

Monitoraggio del servizio

La gestione delle applicazioni e dei contenitori è più complessa rispetto alle distribuzioni di macchine virtuali tradizionali. Esistono funzionalità di registrazione che indicano lo stato dei contenitori in esecuzione. Tuttavia, le informazioni dettagliate sui servizi interni al contenitore sono più complesse da monitorare.

In Docker è ad esempio disponibile il comando docker stats, che restituisce informazioni per il contenitore, come la percentuale di utilizzo della CPU, la percentuale di utilizzo della memoria, i dati di I/O scritti su disco, i dati di rete inviati e ricevuti e gli ID di processo assegnati. Queste informazioni sono utili come flusso di dati immediato. Tuttavia, non viene eseguita nessuna aggregazione perché i dati non vengono archiviati. È necessario installare un software di terze parti per acquisire dati significativi per un certo periodo di tempo.