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

49

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

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

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

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

Resposta: Ahh acabou de amanhecer em mim. São os processos de usuário do Ubuntu, contendo o apt-get e outros processos de configuração para uma construção específica do Ubuntu. Da mesma forma para o CentOS. O Docker não é um processo único, apenas uma entrada simples. Então, para essas distribuições, o ponto de entrada é algum tipo de processo init que gera outros processos.

    
por stewart99 14.03.2015 / 07:17

2 respostas

25

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

A Wikipédia diz link que

Docker uses resource isolation features of the Linux kernel such as cgroups and kernel namespaces to allow independent "containers" to run within a single Linux instance, avoiding the overhead of starting virtual machines.

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

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

link

boot2docker is a lightweight Linux distribution based on Tiny Core Linux made specifically to run Docker containers. It runs completely from RAM, weighs ~27MB and boots in ~5s (YMMV).

link

A single control host (CoreOS instance) runs multiple isolated Linux systems (containers), using Docker as an additional layer of abstraction and interface[14] to the underlying operating-system-level virtualization features of the Linux kernel. ... This approach relies on the Linux kernel's cgroups functionality, which provides namespace isolation and abilities to limit, account and isolate resource usage (CPU, memory, disk I/O, etc.) for the collections of processes.

    
por 14.03.2015 / 07:30
9

Os contêineres podem usar kernels diferentes, mas o kernel do SO host é compartilhado quando possível. 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 do 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 é muito mais portátil e eficiente ".

Isso pode ajudar a explicar como funciona:

Fonte: link

    
por 14.03.2015 / 07:30

Tags