Acabo de empezar a estudiar Docker y hay algo que me está confundiendo bastante. Como he leído en el sitio web de Docker, un contenedor es diferente de una máquina virtual. Como entendí, un contenedor es solo una caja de arena dentro de la cual se ejecuta un sistema de archivos aislado completo.
También he leído que un contenedor no tiene un sistema operativo 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, en realidad? ¿En qué se diferencia la creación de un contenedor basado en la imagen de Debian de la creación de una máquina virtual y la instalación de Debian?
Pensé que los contenedores no tenían instalado un sistema operativo invitado, pero cuando creamos imágenes las basamos en alguna imagen con el nombre de un sistema operativo.
Además, en los ejemplos que vi cuando lo hacemos docker run ubuntu echo "hello world"
, parece que estamos girando una máquina virtual 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 máquina virtual con Ubuntu y accediendo a ella usando la línea de comandos.
De todos modos, ¿de qué se tratan esas imágenes con nombres de sistemas operativos? ¿Qué tan diferente es ejecutar un contenedor con una de esas imágenes y hacer girar una máquina virtual con el sistema operativo invitado correspondiente?
Es la idea de que nosotros simplemente ¿compartir el kernel con el sistema operativo host (y, en consecuencia, tenemos acceso a los recursos de hardware de la máquina subyacente, sin la necesidad de virtualizar el hardware), pero aún así usar los archivos y binarios de cada sistema diferente en los contenedores para admitir cualquier aplicación que queramos ejecutar?