Comecei a estudar Docker e há algo que está sendo bastante confuso para mim. Como li no site do Docker, um contêiner é diferente de uma máquina virtual. Pelo que entendi, um contêiner é apenas uma caixa de areia dentro da qual um sistema de arquivos isolado inteiro é executado.
Também li que um contêiner não possui um SO convidado instalado. Em vez disso, conta com o Kernel do SO subjacente.
Tudo isso está bem. O que estou confuso é que existem imagens do Docker com o nome de sistemas operacionais. Vemos imagens como Ubuntu, Debian, Fedora, CentOS e assim por diante.
O que quero dizer é: o que são realmente essas imagens? Como é diferente criar um container baseado na imagem Debian do que criar uma Máquina Virtual e instalar o Debian?
Eu pensei que os contêineres não tinham SO convidado instalado, mas quando criamos imagens, baseamos-nos em alguma imagem com o nome de um SO.
Além disso, nos exemplos que vi quando parecemos docker run ubuntu echo "hello world"
, parece que estamos criando uma VM com o Ubuntu e fazendo com que ele execute o comando echo "hello world"
.
Da mesma maneira que fazemos docker run -it ubuntu /bin/bash
, parece que estamos criando uma VM com o Ubuntu e acessando-a usando a linha de comando.
Enfim, como são essas imagens com o nome dos sistemas operacionais? Quão diferente é executar um contêiner com uma dessas imagens e girar uma VM com o SO convidado correspondente?
É a ideia de que apenas compartilhamos o kernel com o sistema operacional host (e, consequentemente, temos acesso aos recursos de hardware da máquina subjacente, sem a necessidade de virtualizar o hardware), mas ainda usamos os arquivos e binários de cada sistema diferente nos contêineres para para dar suporte a qualquer aplicativo que queremos executar?