Acabei de começar 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 proteção dentro da qual todo um sistema de arquivos isolado é executado.
Também li que um contêiner não possui um sistema operacional convidado instalado. Em vez disso, ele depende do Kernel do sistema operacional subjacente.
Tudo isso está bem. O que estou confuso é que existem imagens do Docker com nomes de sistemas operacionais. Vemos imagens como Ubuntu, Debian, Fedora, CentOS e assim por diante.
Meu ponto é: o que são essas imagens, realmente? Qual a diferença entre criar um contêiner baseado na imagem do Debian e criar uma máquina virtual e instalar o Debian?
Achei que os contêineres não tivessem um sistema operacional convidado instalado, mas quando criamos imagens, as 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 girando uma VM com o Ubuntu e fazendo com que ela execute o comando echo "hello world"
.
Da mesma forma, quando o fazemos docker run -it ubuntu /bin/bash
, parece que estamos ativando uma VM com o Ubuntu e acessando-a usando a linha de comando.
De qualquer forma, sobre o que são essas imagens com nomes de sistemas operacionais? Quão diferente é executar um contêiner com uma dessas imagens e ativar uma VM com o sistema operacional 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 suportar qualquer aplicativo que queremos executar?