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?
fonte
Respostas:
Como todas as distribuições Linux executam o mesmo kernel Linux (sim, é um pouco simplificado) e diferem apenas no software da terra do usuário, é muito fácil simular um ambiente de distribuição diferente - basta instalar esse software da terra do usuário e fingir que é outra distribuição. Sendo específico, instalar o contêiner CentOS no Ubuntu OS significará que você obterá a área de usuário do CentOS, enquanto ainda estiver executando o mesmo kernel, nem mesmo outra instância do kernel.
A virtualização leve é como ter compartimentos isolados no mesmo sistema operacional. Ao contrário, a virtualização real está tendo outro sistema operacional completo no sistema operacional host. É por isso que o docker não pode executar o FreeBSD ou o Windows no Linux.
Se isso for mais fácil, você pode pensar que o docker é um ambiente chroot muito sofisticado e avançado.
fonte
Os contêineres são executados em um único kernel. Em outras palavras, todos os contêineres têm um único kernel (Host OS). Enquanto, por outro lado, os hipervisores têm múltiplos núcleos. Cada máquina virtual é executada em um kernel diferente.
E "docker run ubuntu" é como criar um ambiente chroot.
fonte