Quando usare i contenitori Docker
Come si è appreso, Docker offre diverse funzionalità da usare. In questa unità vengono esaminati i vantaggi offerti da Docker ai team operativi e di sviluppo. Vengono esaminati anche alcuni scenari in cui Docker potrebbe non essere la scelta migliore.
Questi aspetti consentono di decidere se Docker è adatto alla strategia di containerizzazione.
Come accennato in precedenza, il team deve affrontare molte sfide durante lo sviluppo e la pubblicazione del portale di rilevamento 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. Diamo un'occhiata a tutti i vantaggi trattati 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.
Rispetto a una macchina virtuale, è possibile notare che una VM richiede un sistema operativo installato per fornire le funzioni del kernel alle applicazioni in esecuzione al suo interno. È 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 l'altro requisito del sistema operativo, è possibile liberare risorse nell'host e usarla 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 è appreso, è 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.
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 ora si sceglie di installare la terza applicazione, è necessario installare un'altra macchina virtuale per continuare questo modello.
Portabilità delle applicazioni
I container funzionano 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 leggeri, non soffrono di tempi di avvio o arresto lenti come le macchine virtuali. Questo aspetto rende la ridistribuzione e altri scenari di distribuzione, come l'aumento o la riduzione delle risorse, fluidi e veloci.
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 utilizzabile sia 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 contenimento offre al team operativo la flessibilità per gestire l'ambiente dell'applicazione in modo più preciso. 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.
Implementazioni 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 contenitori Docker in Istanze di Azure Container, app di Azure Container, servizio app di Azure e 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 tenere presente che i contenitori potrebbero non soddisfare tutti i requisiti. È necessario tenere presenti alcuni aspetti.
Sicurezza e virtualizzazione
I contenitori offrono un livello di isolamento, Tuttavia, i container 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 appositamente creata 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 usano la rete bridge per impostazione predefinita e possono accedere reciprocamente tramite l'indirizzo IP.
Non tutte le applicazioni ottengono 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 alcuna aggregazione perché i dati non vengono archiviati. È necessario installare un software di terze parti per acquisire dati significativi per un certo periodo di tempo.