Ho appena iniziato a studiare Docker e c'è qualcosa di abbastanza confuso per me. Come ho letto sul sito Web di Docker, un contenitore è diverso da una macchina virtuale. Come ho capito, un contenitore è solo una sandbox all'interno della quale viene eseguito un intero file system isolato.
Ho anche letto che un container non ha un SO guest installato. Invece si basa sul kernel del sistema operativo sottostante.
Va tutto bene. Ciò che mi confonde è che ci sono immagini Docker che prendono il nome dai sistemi operativi. Vediamo immagini come Ubuntu, Debian, Fedora, CentOS e così via.
Il mio punto è: quali sono quelle immagini, davvero? In che modo è diverso creare un contenitore basato sull'immagine Debian rispetto alla creazione di una macchina virtuale e all'installazione di Debian?
Pensavo che i container non avessero installato SO guest, ma quando creiamo immagini li basiamo su alcune immagini che prendono il nome da un SO.
Inoltre, negli esempi che ho visto quando lo facciamo docker run ubuntu echo "hello world"
, sembra che stiamo facendo girare una VM con Ubuntu e facendola eseguire il comando echo "hello world"
.
Allo stesso modo, quando lo facciamo docker run -it ubuntu /bin/bash
, sembra che stiamo facendo girare una VM con Ubuntu e accedendo da riga di comando.
Ad ogni modo, come si chiamano quelle immagini che prendono il nome dai sistemi operativi? Quanto è diverso eseguire un container con una di quelle immagini e far girare una VM con il SO guest corrispondente?
È l'idea che condividiamo semplicemente il kernel con il sistema operativo host (e di conseguenza abbiamo accesso alle risorse hardware della macchina sottostante, senza la necessità di virtualizzare l'hardware), ma continuiamo a utilizzare i file e i binari di ogni diverso sistema sui contenitori per supportare qualsiasi applicazione che vogliamo eseguire?