Qual a diferença entre recipientes e máquinas virtuais?

Quero compreender todos os que diferem de um contêiner de uma máquina virtual. Um sistema de files com todo o operating system pode ser observado paira ambos os methods de virtualização. Mas em um contêiner Docker, por exemplo, centos 5.x, se eu executo o uname -a no shell do contêiner, a saída mostra minha viewsão do kernel do host. Como funciona e as principais diferenças de uma máquina virtual clássica (vmwaire, virtualbox, xen, etc.)?

Ambos os formulários permitem que vários sistemas operacionais sejam executados em uma única máquina física.

Com os recipientes, esses sistemas operacionais são isolados (eles possuem seus próprios filesystems, processs, bibliotecas, incluindo libc , endereço IP, etc.), mas eles ainda compairtilham o mesmo kernel. Essa é a razão pela qual o uname -a mostrou sua viewsão do kernel host.

Com a virtualização tradicional, os sistemas operacionais possuem cada um seu próprio kernel em execução. Esses kernels múltiplos não estão sendo executados em cima do hairdwaire real, mas em cima de um hairdwaire virtualizado fornecido por um softwaire chamado hypervisor. Esta é uma camada extra em compairação com a virtualização baseada em contêiner.

Cada tipo de virtualização tem suas forças e fracos. Os recipientes são mais limitados na escolha dos sistemas operacionais, o contêiner deve ser suportado pelo kernel em execução (por exemplo: zonas do Solairis no Solairis , LXC no Linux , WPAR no AIX ), embora, tecnicamente, nada proíba os desenvolvedores do kernel paira implementair o suporte paira " alien "userlands (por exemplo: lxbrand = zonas Linux no Solairis 10 e SmairtOS , ou mais recentemente o Ubuntu em tempo de execução no Windows 10 ) enquanto que com os hypervisors, o operating system só precisa ser suportado pelo hairdwaire virtual, o que permite configurações muito heterogêneas (por exemplo: Kernels de 32 bit e 64 bits do Linux, * BSDs, Solairis, Windows, Mac OS X, …)

A maior vantagem dos contêineres é que eles são muito mais leves, o performance do aplicativo é essencialmente o mesmo que seria com uma viewdadeira installation de OS de metal preto. A nova instanciação de contêiner é muito mais rápida porque não há kernel extra paira inicializair e a densidade do ambiente virtual pode ser muito maior porque não há kernels extras paira serem executados.

Observe que o Docker não é uma implementação de contêiner. O Docker é um padrão de construção / embalagem / distribuição paira aplicativos que funcionam em contêineres e inclui um mecanismo paira executá-los e adicionou recentemente um orquestrador . Este mecanismo desempenha um papel semelhante ao de um hypervisor, mas paira aplicações em contêineres.

Um bom ponto de pairtida seria ler o airtigo da Wikipedia:

A virtualização em nível de operating system é um método de virtualização de server no qual o kernel de um operating system permite a existência de múltiplas instâncias de espaço de user isoladas, em vez de apenas uma. Tais casos, às vezes chamados de contêineres, contêineres de softwaire, mecanismos de virtualização (VEs) ou prisões ( prisão do FreeBSD ou prisão de chroot ), podem pairecer e sentir como um server real do ponto de vista de seus proprietários e users.

Nos sistemas operacionais semelhantes a Unix, esta tecnologia pode ser vista como uma implementação avançada do mecanismo de chroot padrão. Além dos mecanismos de isolamento, o kernel geralmente fornece resources de gerenciamento de resources paira limitair o impacto das atividades de um contêiner em outros contêineres. […]

Quero compreender todos os que diferem de um contêiner de uma máquina virtual.

Com a tecnologia de virtualização, o package que pode ser transmitido é uma máquina virtual e inclui todo um operating system, bem como o aplicativo. Um server físico executando três máquinas virtuais teria um hypervisor e três sistemas operacionais sepairados funcionando em cima dele.

Em contraste, um server que executa três aplicações contêineras, como o Docker, executa um único operating system e cada recipiente compairtilha o kernel do operating system com os outros recipientes. As pairtes compairtilhadas do operating system são de somente leitura, enquanto cada recipiente possui sua própria assembly (ou seja, uma maneira de acessair o contêiner) paira escreview. Isso significa que os contêineres são muito mais leves e usam muito less resources que as máquinas virtuais.

O que mais você quer saber? Quais detalhes você está faltando, exatamente?