Qual é o relacionamento entre o SO host do docker e o SO da imagem base do contêiner?

122

Não tenho certeza de que estou fazendo a pergunta certa ... mas, enquanto leio tudo o docker em que posso colocar minhas mãos, vejo que consigo instalar o Docker no Ubuntu 12.04 (por exemplo) e depois instalo um contêiner do Fedora ou uma versão diferente do ubuntu? (há um exemplo em que o usuário instalou o busybox no contêiner.)

E é claro que eu poderia estar completamente errado.

Mas seria minha expectativa que houvesse uma conexão efêmera entre o sistema básico e o contêiner.

atualizado: qual é a relação entre o sistema operacional host e o sistema operacional da imagem base do contêiner?

Richard
fonte

Respostas:

100

Conforme mencionado por BraveNewCurrency, o único relacionamento entre o SO host e o contêiner é o Kernel.

É uma das principais diferenças entre docker e máquinas virtuais 'regulares', não há sobrecarga, tudo ocorre diretamente no kernel do host.

É por isso que você pode executar apenas binários / distribuição baseados em Linux no contêiner. Se você deseja executar outra coisa, não é impossível, mas você precisaria de algum tipo de virtualização dentro do contêiner (qemu, kvm etc.)

O Docker gerencia imagens que são a representação do sistema de arquivos. Você pode instalar qualquer distribuição linux ou simplesmente colocar binários.

De fato, para a conveniência do exemplo, geralmente confiamos nas imagens de base, mas você também pode criar sua imagem sem nenhuma das bibliotecas / binários de distribuição. Dessa forma, você teria um contêiner muito pequeno e funcional.

Mais um ponto em relação às distribuições: como o kernel ainda é o kernel do host, você não terá nenhum módulo / patch específico do kernel fornecido pela distribuição.

creack
fonte
2
Então, se o sistema operacional host for Ubuntu, o contêiner também será o Ubuntu?
Richard
21
O kernel do contêiner será o ubuntu, mas nada mais. Você pode executar facilmente centos, archlinux, debian ou qualquer outra distribuição baseada em linux como contêineres.
creack 18/09/13
37
Embora essas informações possam ser declaradas direta / indiretamente no site docker, eu realmente acho que elas devem tornar isso um pouco mais claro. Eu havia percorrido a página inicial, a visão geral, o tutorial interativo e a maioria dos detalhes básicos. Apesar disso, fiquei confuso sobre esse tópico e estava começando a supor que o melhor desempenho do docker (com base nos diagramas de arquitetura do site) exigiria uma correspondência no SO do host e do contêiner. Eu sou novo no conceito de "kernel do linux", então isso não foi imediatamente óbvio para mim. Saber disso instantaneamente faz com que o estivador seja o dobro do mal.
Ctrlplusb 19/10/2014
2
O Docker é um projeto bastante complexo que utiliza recursos avançados. Em algum momento, presumimos que o usuário tenha algum conhecimento, como a diferença entre sistema operacional e distribuição. Se você acha que isso agregaria valor, a documentação é de código aberto e você pode enviar uma solicitação de recebimento.
creack
3
Isso parece indicar que apenas as partes do espaço do usuário de um sistema operacional (bibliotecas, comandos, aplicativos) podem ser contêineres. Se o aplicativo exigir uma revisão diferente do kernel (por exemplo, 3.10 vs. 4.9), talvez não seja possível executar em um contêiner. Isso está certo?
David C.
23

Literalmente, a única coisa que eles têm em comum é o kernel. Seu mundo inteiro (sistema de arquivos) está no contêiner do docker.

BraveNewCurrency
fonte
1

Há outra consideração - mesmo se os dois kernels forem iguais, haverá um problema se o SO host não suportar o Docker, como o RHEL 6: https://access.redhat.com/solutions/1378023

Portanto, você não poderá girar um contêiner no RHEL 6, mesmo que a imagem seja Linux.

flow2k
fonte