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 sandbox dentro da qual todo um sistema de arquivos isolado é executado.
Também li que um contêiner não tem 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 Docker com o nome de sistemas operacionais. Vemos imagens como Ubuntu, Debian, Fedora, CentOS e assim por diante.
Meu ponto é: o que são essas imagens, realmente? Como é diferente criar um contêiner baseado na imagem Debian do que criar uma máquina Virtual e instalar Debian?
Eu pensei que os contêineres não tinham um sistema operacional convidado instalado, mas quando criamos imagens, os baseamos em alguma imagem com o nome de um sistema operacional.
Além disso, em exemplos que vi quando o fazemos docker run ubuntu echo "hello world"
, parece que estamos girando uma VM com o Ubuntu e fazendo-a executar o comando echo "hello world"
.
Da mesma forma quando fazemos docker run -it ubuntu /bin/bash
, parece que estamos girando uma VM com o Ubuntu e acessando-a usando a linha de comando.
De qualquer forma, Quais são essas imagens em homenagem aos sistemas operacionais? Quão diferente é executar um contêiner com uma dessas imagens e girar uma VM com o sistema operacional convidado correspondente?
É a ideia de que nós apenas compartilhe o kernel com o sistema operacional host (e, consequentemente, temos acesso aos recursos de hardware da máquina subjacentes, sem a necessidade de virtualizar o hardware), mas ainda use os arquivos e binários de cada sistema diferente nos contêineres para oferecer suporte a qualquer aplicativo que queremos executar?