As principais diferenças práticas entre o contêiner do Docker e a VM:
-
A imagem Docker é apenas uma imagem de base do sistema original (
debootstap
ajuda a obter essa imagem base) e de causa pode (ou não) conter kernel, initrd ... Mas o kernel, initrd ... não fazem sentido em vez de pesquisar, desenvolver, outras dependências de pacotes. Então, se não for necessário, eles podem ser removidos com segurança. -
Os contêineres do Docker são iniciados em diferentes espaço de nomes que ocultam processos reais do sistema, conexões de rede ... do impacto do contêiner. Em suma, não é possível processar o processo real do sistema
kill
do contêiner Docker, mas você pode ver o processo do contêiner Docker como processo comum do sistema real e fazer qualquer coisa com ele. VM organizada mais difícil em vez do conceito namespace : todas as VMs são iniciadas como aplicativos enormes que são controlados pelo software da VM (VirtualBox, VMware ...). O software da VM captura todas as chamadas do sistema desse aplicativo e as transmite para o hardware real. Portanto, eles são mais lentos do que o conceito de container. -
Os contêineres do Docker fornecem o ambiente 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 usa novos recursos do kernel, eles não serão trabalhados.
-
Os contêineres do Docker geralmente não contêm imagem completa do sistema, porque o principal destino do conceito do Docker é o compartilhamento de 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).