Diferença entre chroot e Docker

15

Não entendo a diferença entre docker e chroot. Sim, é bom em termos de empacotamento do registro. Mas de alguma forma eu sinto que é só chroot com sinos e assobios extras.

Eu sei que estou perdendo alguma coisa. Seria ótimo saber como elas são diferentes e a necessidade do docker se o chroot pudesse fazer algo semelhante.

Também não consegui encontrar este Chroot Vs Docker suficientemente claro.

Vipin Menon
fonte
Bem, sim, o Docker não faz nada que o kernel ainda não faça por você. Apenas o empacota em uma ferramenta mais ou menos coerente e bastante fácil de usar. Você pode criar seu próprio Docker se estiver preocupado em executar chroot, namespaces, cotas, NAT e todo o resto.
Gaius

Respostas:

8

Bem, os sinos e assobios extras são chamados de isolamento do processo, um contêiner obtém seu próprio espaço de nome no kernel do host, o que significa que o programa no contêiner não pode tentar ler a memória do kernel ou consumir mais RAM do que o permitido.

Ele também isola pilhas de rede, para que dois processos possam escutar na porta 8080, por exemplo, você terá que lidar com o roteamento no nível do host, não há mágica aqui, mas isso permite manipular o roteamento em um único local e evitar modificar a configuração do processo para ouça uma porta gratuita.

Em segundo lugar, um chroot ainda é de leitura / gravação, qualquer alteração é permanente, um contêiner de docker usando aufsserá iniciado a partir de um sistema de arquivos limpo toda vez que você iniciar o contêiner (as alterações serão mantidas se você parar / iniciar o IIRC).

Portanto, embora um contêiner possa ser considerado como process namespace+ chroot, a realidade é um pouco mais complexa.

Tensibai
fonte
Observe que aufsnão é mais usado por padrão. Agora éoverlay2
Vitalii Vitrenko
É verdade, mas eu acho que há mais materiais educacionais que fazem referência aufs que overlay2 por agora :)
Tensibai
Um processo normal não pode ler nenhuma memória que não deveria. Se você está confiando no Docker para segurança, está fazendo errado ... #
Gaius
@ Gaius, você está me lendo errado, só estou tentando fornecer dicas de pesquisa para o OP ... Adicionar docker em um pipeline de entrega com toda a liberdade que ele dá ao desenvolvedor para o que ele usa no interior não é absolutamente um ponto de segurança. No entanto, os namespaces protegem contra um monte de estouro de pilha e estouro de buffer por natureza.
Tensibai
5

Sim, há absolutamente mais do que isso, chroota ponto de eles terem pouco ou nada em comum.

  • Um formato de arquivo de script padronizado, incluindo semântica relacionada à tarefa de uma mão
  • Imagens (incluindo imagens intermediárias anônimas), armazenamento em cache, nomeação, download etc., incluindo gerenciamento poderoso ( docker image prune...)
  • Contêineres (incluindo seus próprios sistemas de arquivos temporários, nomes, poder docker execentrar neles etc.)
  • Gerenciamento de processos ( docker container ...)
  • Rede com apenas uma opção simples, incluindo rede intra-docker-container-etc.
  • Volumes (incluindo volumes gerenciados especiais)
  • docker-compose ou enxame como atualizações de baixo perfil para muito mais.
  • O grande zoológico de outras soluções baseadas em contêineres dockerizados (OpenShift etc.).
AnoE
fonte