Eu sei que os contêineres do docker não executam seu próprio kernel, mas compartilham um com o host, ao contrário de uma VM que executa seu próprio kernel, mas quais são as diferenças práticas entre uma imagem do docker debian e uma vm com o debian instalado?
Existe algo que possa ser feito dentro de um, mas não no outro, ou eles são funcionalmente iguais, então qualquer coisa que rodar em uma instalação real do Debian funcionará também dentro de um contêiner docker Debian?
O sistema operacional host também muda as coisas? Se eu executar um contêiner Debian em um sistema CentOS, ele funcionará diferente de um contêiner Debian em um sistema Debian?
As principais diferenças práticas entre contêiner Docker e VM:
A imagem do Docker é apenas uma imagem base do sistema original (
debootstap
ajuda a obter essa imagem base) e, claro, pode (ou não) conter kernel, initrd ... Mas o kernel, initrd ... não faz sentido em vez de pesquisar, desenvolver , outras dependências de pacotes. Então, se eles não forem necessários, eles podem ser removidos com segurança.Os contêineres do Docker começam em diferentes namespaces que ocultam processos reais do sistema, conexões de rede ... do impacto do contêiner. Simplificando, você não pode
kill
processar o sistema real do contêiner Docker, mas pode ver o processo do contêiner Docker como um processo comum do sistema real e fazer qualquer coisa com ele. VM organizada mais difícil em vez do conceito de namespace : todas as VMs começam como aplicativos enormes que são controlados pelo software VM (VirtualBox, VMware ...). O software da VM intercepta todas as chamadas do sistema desse aplicativo e as passa para o hardware real. Portanto, eles são mais lentos do que o conceito de contêiner.Os contêineres do Docker fornecem o ambiente de suporte necessário para executar algum aplicativo (versões de bibliotecas específicas, componentes de software ...), mas não o kernel. Portanto, se seu aplicativo usar novos recursos do kernel, eles não serão trabalhados.
Os contêineres do Docker geralmente não contêm a imagem completa do sistema, porque o principal alvo do conceito do Docker é compartilhar aplicativos. O principal alvo da VM é compartilhar sistemas operacionais.
Não há diferença sobre o sistema real que inicia uma imagem específica do Docker (exceto casos em que seu aplicativo depende de um kernel específico).