GNU/Linux >> Linux Esercitazione >  >> Panels >> Docker

Come funzionano i contenitori cloud e i loro vantaggi

Le tendenze tecnologiche vanno e vengono, ma i contenitori cloud sono una tecnologia che è qui per restare. Le loro origini possono essere fatte risalire a Unix del 1982, ma i container non sono stati ampiamente accettati fino all'ultimo decennio come passo logico successivo dalla virtualizzazione. Oggi sono un mezzo popolare di modernizzazione e distribuzione delle applicazioni.

L'obiettivo della containerizzazione, ovvero il processo di migrazione delle app legacy ai container, è offrire un modo migliore per creare, impacchettare e distribuire applicazioni software complesse in ambienti diversi. La containerizzazione offre un modo per rendere le applicazioni meno complesse da distribuire, aggiornare/modificare/modificare e ridimensionare.

I container sono sempre più diffusi negli ambienti cloud a causa della loro leggerezza rispetto alle macchine virtuali (VM). Molte organizzazioni considerano i container un'alternativa ai carichi di lavoro su larga scala delle macchine virtuali.

Cosa sono i contenitori cloud?

I contenitori di calcolo contengono il codice dell'applicazione insieme alle relative librerie e dipendenze delle funzioni in modo che possano essere eseguiti ovunque; sia su un PC desktop, su un'infrastruttura di server IT tradizionale o su cloud.

Sono piccoli, veloci e portatili perché, a differenza di una macchina virtuale, i container non devono includere un sistema operativo completo in ogni istanza. Tutto ciò di cui hanno bisogno sono le librerie e le dipendenze necessarie per eseguire l'app e sfruttare le altre funzionalità e le risorse richieste dal sistema operativo host.

I contenitori vengono creati dalle immagini del contenitore, che sono modelli che contengono il sistema, le applicazioni e l'ambiente del contenitore. Con le immagini del contenitore, gran parte del lavoro di creazione di un contenitore è già svolto per te. Tutto quello che devi fare è aggiungere la logica di calcolo. Esistono molti modelli diversi per la creazione di contenitori specifici per l'uso, così come esistono librerie e modelli per lo sviluppo del codice.

Esistono più siti di modelli di container, ma il leader di mercato è Docker, che ha dato il via alla tendenza dei container nel 2013. Docker è un set di strumenti che consente agli utenti di creare immagini di container, inviare o estrarre immagini da registri esterni ed eseguire e gestire container in molti ambienti diversi. Gestisce anche il più grande hub di distribuzione di modelli di container. Per informazioni su come installare Docker sul tuo sistema Linux, consulta la nostra guida Installazione e utilizzo di Docker.

I contenitori sono notevolmente ridotti in termini di dimensioni e complessità e spesso svolgono solo una singola funzione. Solo perché sono piccoli non significa che non debbano essere gestiti. I container vengono gestiti tramite un processo noto come orchestrazione, che automatizza gran parte delle attività operative necessarie per eseguire carichi di lavoro e servizi containerizzati.

L'orchestrazione copre la gestione del ciclo di vita di un container, il provisioning, la distribuzione, la scalabilità verticale, il bilanciamento del carico e altro ancora. Esistono diverse app di orchestrazione, ma di gran lunga la più popolare è Kubernetes originariamente progettata da Google e ora gestita dalla Cloud Native Computing Foundation.

Contenitori e macchine virtuali

I container vengono regolarmente confrontati con le macchine virtuali qui e altrove e per una buona ragione. Operano sullo stesso concetto, ovvero il funzionamento di più ambienti applicativi sullo stesso hardware fisico.

Le VM sono considerate la base della prima generazione di cloud computing. Con l'avvento dell'elaborazione a 64 bit, i server si sono evoluti oltre il limite di memoria di 4 GB dei processori a 32 bit. L'arrivo della potenza di elaborazione prodotta multi-core per più ambienti virtuali. Con memoria e core sufficienti è possibile eseguire un centinaio o più VM su un sistema fisico.

Una macchina virtuale necessita di un ambiente operativo completo che consuma da uno a due gigabyte di memoria, indipendentemente dal fatto che si trovi su un server Windows o su una versione di Linux. Un container è un ambiente operativo notevolmente ridotto e utilizza solo 6 MB di memoria.

Il vantaggio è che puoi avere centinaia di container su un server robusto, purché tu abbia la memoria e la potenza di elaborazione per gestirlo tutto.

Gli hypervisor VM virtualizzano l'hardware fisico e i container virtualizzano il sistema operativo. L'hypervisor gestisce e coordina tutte le attività di I/O e macchina, bilancia il carico ed elabora tutte le attività fisiche come l'elaborazione e il movimento dei dati.

Un gestore di container come Kubernetes gestisce le attività software per le quali il container non è configurato. L'app all'interno del contenitore ha ciò di cui ha bisogno con le sue librerie e dipendenze. Se ha bisogno di qualcos'altro dal sistema operativo, il gestore dei contenitori lo gestisce.

Non è una decisione né/o quando si tratta di macchine virtuali e container. Possono coesistere facilmente, con i container all'interno delle macchine virtuali che funzionano.

Come funzionano i contenitori cloud?

La tecnologia dei container è nata con la prima separazione delle partizioni e dei processi chroot in Unix, che è stata successivamente aggiunta a Linux. I contenitori raggruppano i file di dipendenza e le librerie nel contenitore anziché fare affidamento sul sistema operativo sottostante. Le app eseguite nei contenitori non sono app complete e complesse che vengono eseguite in un ambiente virtuale o non virtuale standard. Ogni contenitore opera in isolamento virtuale con ogni applicazione che accede a un kernel del sistema operativo condiviso senza la necessità di macchine virtuali.

I contenitori cloud sono progettati per virtualizzare una singola applicazione, che si tratti di una semplice app monouso o di un database MySQL. I contenitori hanno un limite di isolamento a livello di applicazione anziché a livello di server, quindi il contenitore viene isolato in caso di problemi. Se si è verificato un arresto anomalo dell'app o un consumo eccessivo inspiegabile di risorse da parte di un processo, interessa solo quel singolo contenitore e non l'intera macchina virtuale o l'intero server. L'agente di orchestrazione è in grado di avviare un altro contenitore per sostituire il contenitore problematico. Inoltre, si spegne e riavvia il contenitore con il problema.

I vantaggi dei container nel cloud computing

I vantaggi dell'utilizzo dei contenitori sono numerosi. Innanzitutto, l'uso dei modelli è simile a come funzionano le classi e le librerie nella programmazione orientata agli oggetti (OOP). In OOP crei una classe o un oggetto e poi lo riutilizzi in più app. Lo stesso vale per i contenitori. Una singola immagine del contenitore viene utilizzata per creare più contenitori. Il concetto di ereditarietà OOP si applica anche ai contenitori poiché le immagini del contenitore fungono da genitore per altre immagini contenitore più personalizzate.

I contenitori vengono eseguiti in modo coerente su un desktop, un server locale o nel cloud. Ciò semplifica il test prima della distribuzione. Alcuni scenari richiedono un banco di prova simile in scala all'impostazione di distribuzione, il che significa dedicare risorse considerevoli per l'ambiente di prova. I container possono essere testati localmente prima dell'implementazione nel cloud con la consapevolezza che le prestazioni saranno coerenti.

Il vantaggio principale dei container, soprattutto rispetto a una macchina virtuale, è che i container sono leggeri e portatili. I container condividono il kernel del sistema operativo della macchina, che elimina molto sovraccarico. Le loro dimensioni ridotte rispetto alle VM significano che possono girare rapidamente e supportare meglio le applicazioni native del cloud che si ridimensionano orizzontalmente.

  1. Sono indipendenti dalla piattaforma:i container portano con sé tutte le loro dipendenze e puoi usarli su diverse versioni di Linux purché non effettui chiamate al kernel.

  2. Supporta le moderne architetture di sviluppo:grazie alla combinazione della portabilità/coerenza della distribuzione su più piattaforme e alle dimensioni ridotte, i container si adattano perfettamente alle moderne metodologie di sviluppo e applicazione, come Agile, DevOps, serverless e microservizi.

  3. Migliora le prestazioni:le app containerizzate sono in genere grandi app suddivise in parti gestibili. Ciò ha molteplici vantaggi, non ultimo il miglioramento delle prestazioni perché se un componente necessita di maggiori risorse, il contenitore si ridimensiona automaticamente per offrire più core/memoria/rete CPU, quindi ridimensiona quando il carico diminuisce.

  4. Debug efficiente:un altro vantaggio della containerizzazione rispetto alle app monolitiche è che diventa più rapido trovare i colli di bottiglia delle prestazioni. Con un'app monolitica, gli sviluppatori devono eseguire molti tentativi ed errori/processi di eliminazione per trovare un collo di bottiglia delle prestazioni. Se suddiviso in componenti, il codice offensivo diventa più visibile e gli sviluppatori possono ingrandire più rapidamente il punto del problema.

  5. Supporto ibrido/multi-cloud:grazie alla sua portabilità, i container possono migrare avanti e indietro tra il locale e il cloud. Possono anche passare da un provider cloud a un altro.

  6. Modernizzazione delle applicazioni:un modo comune per modernizzare un'applicazione legacy on-premise consiste nel containerizzarla e spostarla "così com'è" nel cloud. Questo modello è noto come "solleva e sposta" e non è raccomandato. Le app in locale si comportano in modo diverso rispetto alle app native per il cloud e il semplice spostamento di un'app in locale nel cloud senza modifiche non sfrutta i vantaggi del cloud, come il ridimensionamento automatico verso l'alto e verso il basso.

  7. Migliora l'utilizzo:in un'app monolitica, l'intera app e tutto il relativo utilizzo della memoria devono aumentare le prestazioni. Questo rallenta il server. Con un'app containerizzata, solo quel componente ad alta intensità di prestazioni deve essere ridimensionato. Lo fa automaticamente e l'agente di orchestrazione aumenta la scalabilità delle risorse quando necessario, quindi riduce la scalabilità al termine dell'attività.

Conclusione

I container sono un modo sempre più diffuso per le aziende di migrare le app on-premise nel cloud e sfruttare tutti i vantaggi che il cloud offre:scalabilità, elasticità, sviluppo DevOps e scarico di risorse on-premise su un provider cloud.

La tecnologia è matura, con numerosi concorrenti di Docker, incluso Microsoft Azure, e concorrenti di Kubernetes, come Red Hat OpenShift. La maggior parte dei fornitori di servizi cloud offre alcuni servizi di orchestrazione e container già pronti, incluso noi di Linode, con un servizio Kubernetes gestito.


Docker
  1. Come esportare e importare contenitori Docker

  2. Monitoraggio dei container Docker:vantaggi, best practice e strumenti indispensabili

  3. Come condividere i dati tra contenitori Docker

  4. Come elencare i contenitori Docker

  5. Come installare, eseguire ed eliminare applicazioni all'interno dei contenitori Docker – Parte 2

Come distribuire e gestire un contenitore Docker MongoDB

Come eseguire SSH nei contenitori Docker [Passo dopo passo]

Come eseguire i contenitori Docker

Come rinominare o rinominare i contenitori Docker

Procedura:Introduzione a Windows Containers e Docker

Come gestire i container Docker