Por que usamos uma imagem de base do sistema operacional com o Docker se os contêineres não tiverem um sistema operacional convidado?

62

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?

    
por user1620696 11.02.2016 / 16:39

2 respostas

55

Como todas as distribuições Linux executam o mesmo kernel do Linux e são diferentes apenas do software do usuário, é muito fácil simular um ambiente de distribuição diferente - apenas instalando o software do usuário e fingindo que é outra distribuição. Sendo específico, instalar o container do CentOS dentro do Ubuntu OS significa que você obterá o userland do CentOS, enquanto ainda executa o mesmo kernel, nem mesmo outra instância do kernel.

A virtualização leve é como ter compartimentos isolados dentro do mesmo sistema operacional. A virtualização real contrária é ter outro sistema operacional completo dentro do sistema operacional host. É por isso que o docker não pode executar o FreeBSD ou o Windows dentro do Linux.

Se isso for mais fácil, você pode pensar que o docker é um ambiente chroot muito sofisticado e avançado.

    
por 11.02.2016 / 17:15
1

Os contêineres são executados em um único kernel. Em outras palavras, todos os contêineres possuem um único kernel (Host OS). Considerando que, por outro lado, os hipervisores possuem múltiplos kernais. Cada máquina virtual é executada em um kernel diferente.

E "docker run ubuntu" é como criar um ambiente chroot.

    
por 16.06.2016 / 01:33