Acabei de começar a estudar o Docker e há algo que está sendo bastante confuso para mim. Como eu li no site do Docker, um contêiner é diferente de uma máquina virtual. Como eu entendi um contêiner é apenas um sandbox dentro do qual um sistema de arquivos inteiro isolado é executado.
Eu também li que um contêiner não tem um sistema operacional convidado instalado. Em vez disso, ele depende do Kernel do SO subjacente.
Tudo isso está bem. O que estou confuso é que existem imagens do Docker nomeadas após os sistemas operacionais. Nós vemos imagens como Ubuntu, Debian, Fedora, CentOS e assim por diante.
Meu ponto é: quais são essas imagens, realmente? Como é diferente criar um container baseado na imagem do Debian do que criar uma máquina virtual e instalar o Debian?
Eu pensei que os containers não tinham o sistema operacional convidado instalado, mas quando criamos imagens, nós os baseamos em alguma imagem com o nome de um sistema operacional.
Além disso, nos exemplos que vi quando fazemos 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 forma, quando 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, quais são as imagens nomeadas após sistemas operacionais? Quão diferente é executar um contêiner com uma dessas imagens e criar uma VM com o SO Convidado correspondente?
É a ideia de que nós 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 hardware), mas ainda usamos os arquivos e binários de cada sistema diferente nos contêineres para suportar qualquer aplicativo que desejamos executar?