Olá, Dener
Você fez uma ótima observação sobre a relação entre contêineres e máquinas virtuais (VMs).
A diferença principal entre um contêiner e uma VM é que uma VM é uma abstração completa de uma máquina, incluindo o sistema operacional (SO), enquanto um contêiner é uma abstração mais leve que compartilha o SO do host. Quando você cria um contêiner Ubuntu, por exemplo, o que está acontecendo é que você está criando um ambiente isolado que pode rodar aplicativos como se estivessem em um sistema Ubuntu, mas sem a necessidade de ter todo o SO Ubuntu instalado.
No caso do Docker, a imagem Ubuntu é apenas uma série de camadas de arquivos que representam o estado do sistema de arquivos de um sistema Ubuntu. Ela não contém um kernel do Linux, drivers de dispositivo ou outros componentes de baixo nível do SO. Esses são fornecidos pelo SO do host. Isso é o que torna os contêineres tão leves em comparação com as VMs.
No exemplo da aula, quando você executa um contêiner Ubuntu Bash, você está criando um ambiente que tem acesso a um shell Bash e a outras ferramentas e bibliotecas comuns em um sistema Ubuntu. No entanto, ele ainda usa o kernel e outros componentes do SO do host.
A diferença entre um contêiner que "traz um sistema operacional" e uma VM é que a VM tem seu próprio kernel e outros componentes de baixo nível, enquanto o contêiner compartilha esses componentes com o host. Isso torna os contêineres mais eficientes em termos de recursos do que as VMs, mas também significa que eles são menos isolados do host e uns dos outros do que as VMs.
Espero ter ajudado e bons estudos!