Container, Docker e Kubernetes – Introduzione (1)

Published by Lello on

Cominciamo a dare delle definizioni, per capire meglio cosa rappresentano questi oggetti e perchè sono così importanti in un’ottica cloud.

Container:  I container sono un modo per preparare package preconfezionato, con all’interno tutto quello che serve per eseguire il codice (codice, librerie di run-time, variabili e file di configurazione) nella macchina di destinazione.

Come nella virtualizzazione, lo strumento dei container viene enormemente in aiuto in un ambito cloud, soprattutto nell’ottica dell sharing delle risorse e del porting delle applicazioni; infatti i container sono:

  • Flessibili: anche le applicazioni più complesse possono essere containerizzate;
  • Leggeri: i container sfruttano e condividono il kernel host;
  • Intercambiabili: è possibile distribuire aggiornamenti e aggiornamenti al volo;
  • Portatili: è possibile creare localmente, distribuire nel cloud ed eseguire ovunque;
  • Scalabili: è possibile aumentare e distribuire automaticamente le repliche del contenitore;
  • Impilabili: è possibile impilare i servizi verticalmente e al volo.

Quindi, quando prendo un container “master” e lo duplico su un altro server, so esattamente come verrà eseguito e quale sarà il suo comportamento: è prevedibile, ripetibile e immutabile. Non ci sono errori imprevisti quando lo si sposta su una nuova macchina o tra ambienti

Basti pensare a un sito web, in cui invece di fare export/import degli ambienti di sviluppo/test/produzione, si prende il container che contiene il sito e lo si porta nell’ambiente di destinazione, lasciando invariati i dati.

Ma se i container portano semplicità d’uso e scalabilità, impongono anche un development dell’applicazione modulare, in cui i moduli sono indipendenti e disaccopiati. I vari moduli saranno incapsulati in un gruppo di container che cooperano tra di loro e vengono esposti verso l’esterno per formare un service. Quindi anche le applicazioni dovranno seguire uno sviluppo diverso dallo sviluppo monolitico a cui eravamo abituati sino a poco tempo fa.

Ma qual è la differenza tra VM e container? Entrambi si basano sulla tecnologia della virtualizzazione, dello sharing delle risorse; le differenze principali (e sostanziali) sono:

  • Il container viene eseguito in modo nativo su Linux e condivide il kernel della macchina host con gli altri container;
  • la VM esegue un SO guest completo con accesso virtuale alle risorse host filtrato dall’hypervisor.

In generale, quindi, le VM forniscono un ambiente con più risorse di quante le applicazioni ne necessitano; rispetto alle VM, ho spreco di risorse a parità di container e VM.

Container stack example           Virtual machine stack example

 

Container, Docker e Kubernetes – Introduzione (2) →