Acabo de comenzar a estudiar Docker y hay algo que me resulta bastante confuso. Como leí en el sitio web de Docker, un contenedor es diferente de una máquina virtual. Como entendí, un contenedor es solo un sandbox dentro del cual se ejecuta un sistema de archivos aislado completo.
También he leído que un contenedor no tiene un SO invitado instalado. En su lugar, se basa en el núcleo del sistema operativo subyacente.
Todo eso está bien. Lo que me confunde es que hay imágenes de Docker con nombres de sistemas operativos. Vemos imágenes como Ubuntu, Debian, Fedora, CentOS, etc.
Mi punto es: ¿cuáles son esas imágenes realmente? ¿Cómo es diferente crear un contenedor basado en la imagen de Debian que crear una máquina virtual e instalar Debian?
Pensé que los contenedores no tenían un SO invitado instalado, pero cuando creamos imágenes las basamos en alguna imagen que lleva el nombre de un SO.
Además, en los ejemplos que vi cuando lo hacemos docker run ubuntu echo "hello world"
, parece que estamos girando una VM con Ubuntu y haciendo que ejecute el comando echo "hello world"
.
De la misma manera cuando lo hacemos docker run -it ubuntu /bin/bash
, parece que estamos girando una VM con Ubuntu y accediendo a ella usando la línea de comandos.
De todos modos, ¿cómo se llaman esas imágenes después de los sistemas operativos? ¿Qué tan diferente es ejecutar un contenedor con una de esas imágenes y hacer girar una VM con el SO invitado correspondiente?
Es la idea de que simplemente compartamos el kernel con el sistema operativo host (y, en consecuencia, tenemos acceso a los recursos de hardware subyacentes de la máquina, sin la necesidad de virtualizar el hardware), pero aún utilizamos los archivos y binarios de cada sistema diferente en los contenedores en orden para admitir cualquier aplicación que queramos ejecutar?