Os contêineres Docker têm seu próprio kernel ou não?

Os contêineres Docker têm seu próprio kernel ou não?

Vejo que muitas imagens do docker no repositório do docker são feitas com uma base Ubuntu.

O que isso significa? Cada contêiner inclui uma versão simplificada do kernel do Linux?

Os contêineres ficam sobre seus próprios kernels? Mas pensei que os contêineres compartilhassem o kernel do host (que em alguns casos é boot2docker, uma versão personalizada do Tiny Core Linux e, em outros, algo como CoreOS).

EDITAR:Esclarecendo um pouco a questão. Sim, eu sei que o docker é um contêiner de processo, não uma VM completa. Mas como existem contêineres “Ubuntu” no registro oficial do docker hub e em outros sistemas operacionais como o CentOS, o que significa executar o Ubuntu em um contêiner?

Responder:Ah, acabei de perceber. São os processos do usuário do Ubuntu, contendo o apt-get e outros processos de configuração para uma compilação específica do Ubuntu. Da mesma forma para CentOS. Docker não é um processo único, apenas uma entrada única. Portanto, para essas distribuições, o ponto de entrada é algum tipo de processo init que gera outros processos.

Responder1

Docker usa kernel do sistema operacional host, não há kernel personalizado ou adicional dentro do contêiner. Todos os contêineres executados em uma máquina compartilham esse kernel "host".

Wikipédia dizhttp://en.wikipedia.org/wiki/Docker_(software)que

O Docker usa recursos de isolamento de recursos do kernel Linux, como cgroups e namespaces do kernel, para permitir que "contêineres" independentes sejam executados em uma única instância do Linux, evitando a sobrecarga de inicialização de máquinas virtuais.

cgroups, namespaces e LXC são recursos do kernel Linux para isolar grupos de processos; ainda existe um único kernel, um único agendador e uma instância do gerenciador de memória do kernel.

Boot2docker e CoreOS são apenas distribuições leves do Linux com algum kernel host; eles podem ser usados ​​para carregar contêineres Docker.

http://boot2docker.io/

boot2docker é uma distribuição Linux leve baseada no Tiny Core Linux feita especificamente para executar contêineres Docker. Ele roda completamente a partir de RAM, pesa aproximadamente 27 MB e inicializa em aproximadamente 5s (YMMV).

http://en.wikipedia.org/wiki/CoreOS

Um único host de controle (instância CoreOS) executa vários sistemas Linux isolados (contêineres), usando Docker como uma camada adicional de abstração e interface[14] para os recursos de virtualização em nível de sistema operacional subjacentes do kernel Linux. ... Esta abordagem depende da funcionalidade cgroups do kernel Linux, que fornece isolamento de namespace e habilidades para limitar, contabilizar e isolar o uso de recursos (CPU, memória, E/S de disco, etc.) para as coleções de processos.

Responder2

Em quase todos os casos, o kernel do sistema operacional host é compartilhado. Para executar um kernel diferente você precisa usar a virtualização. Isso é raro e usado apenas quando necessário devido à degradação do desempenho.

"O contêiner Docker Engine compreende apenas o aplicativo e suas dependências. Ele é executado como um processo isolado no espaço do usuário no sistema operacional host, compartilhando o kernel com outros contêineres. Assim, ele aproveita os benefícios de isolamento e alocação de recursos das VMs, mas é muito mais portátil e eficiente."

Isso pode ajudar a explicar como funciona: insira a descrição da imagem aqui

Fonte:https://www.docker.com/whatisdocker/

Responder3

Todos os contêineres docker usam o kernel host.

Isso também significaria que alguma incompatibilidade entre um kernel host e a distribuição do contêiner poderia causar problemas. Em teoria. Por exemplo, se um software em contêiner quisesse usar algum recurso do kernel que não foi compilado no kernel host, então não funcionaria.

A prática é que isso não aconteça. A principal fonte de problemas dos contêineres do docker são as limitações (muitas vezes inexplicáveis) do próprio docker, e não alguma incompatibilidade do kernel host-guest.

(Ps É porque praticamente todas as distros Linux funcionam com qualquer kernel Linux.)

informação relacionada