Qual é a diferença entre containers e máquinas virtuais?

6

Eu quero compreender tudo o que difere um contêiner de uma máquina virtual. Um sistema de arquivos com todo o sistema operacional pode ser observado para esses dois métodos de virtualização. Mas num contentor Docker, e. centos 5.x, se eu exec uname -a no shell do contêiner, a saída mostrará a versão do meu kernel do host. Como funciona e as principais diferenças de uma máquina virtual clássica (vmware, virtualbox, xen, etc)?

    
por Thiago Rider Augusto 10.07.2016 / 00:52

2 respostas

11

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

Com contêineres, esses sistemas operacionais são isolados (eles têm seus próprios sistemas de arquivos, processos, bibliotecas, incluindo o libc , endereço IP, etc.), mas eles ainda compartilham o mesmo kernel. Essa é a razão pela qual uname -a mostrou sua versão do kernel do host.

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

Cada tipo de virtualização tem seus pontos strongs e fracos. Os contêineres são mais limitados na escolha de sistemas operacionais, o container deve ser suportado pelo kernel em execução (por exemplo: Solaris zones on Solaris , LXC no Linux , WPAR no AIX ) embora tecnicamente, nada proíbe os desenvolvedores de kernel de implementar o suporte para userlands" alheios "(por exemplo: lxbrand = Zonas do Linux no Solaris 10 e SmartOS ou, mais recentemente, tempo de execução do Ubuntu no Windows 10 ) enquanto com hipervisores, o sistema operacional precisa apenas ser suportado pelo hardware virtual, o que permite muitas configurações heterogêneas (por exemplo, Linux kernels de 32 e 64 bits, * BSDs , Solaris, Windows, Mac OS X, ...)

A principal vantagem dos contêineres é que eles são muito mais leves, o desempenho do aplicativo é essencialmente o mesmo que seria com uma instalação de SO de metal puro. A instanciação de novos contêineres é muito mais rápida porque não há um kernel extra para inicializar, e a densidade do ambiente virtual pode ser muito maior porque não há kernels extras para serem executados.

Observe que Docker não é uma implementação de contêiner. O Docker é um padrão de construção / embalagem / distribuição para aplicativos executados em contêineres e inclui um engine para executá-los e recentemente adicionou um orquestrador também. Esse mecanismo desempenha um papel semelhante ao de um hipervisor, mas para aplicativos em contêineres.

    
por 10.07.2016 / 01:27
1

Um bom ponto de partida seria ler o artigo da Wikipédia :

Operating-system-level virtualization is a server virtualization method in which the kernel of an operating system allows the existence of multiple isolated user-space instances, instead of just one. Such instances, which are sometimes called containers, software containers, virtualization engines (VEs) or jails (FreeBSD jail or chroot jail), may look and feel like a real server from the point of view of its owners and users.

On Unix-like operating systems, this technology can be seen as an advanced implementation of the standard chroot mechanism. In addition to isolation mechanisms, the kernel often provides resource-management features to limit the impact of one container's activities on other containers. [...]


I want to comprehend all that differ a container from a virtual machine.

Com a tecnologia de virtualização, o pacote que pode ser passado é uma máquina virtual e inclui um sistema operacional inteiro, bem como o aplicativo. Um servidor físico executando três máquinas virtuais teria um hipervisor e três sistemas operacionais separados executados sobre ele.

Por outro lado, um servidor que executa três aplicativos em contêiner como o Docker executa um único sistema operacional e cada contêiner compartilha o kernel do sistema operacional com os outros contêineres. As partes compartilhadas do sistema operacional são somente leitura, enquanto cada contêiner tem sua própria montagem (ou seja, uma maneira de acessar o contêiner) para gravação. Isso significa que os contêineres são muito mais leves e usam muito menos recursos do que máquinas virtuais.

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

    
por 10.07.2016 / 01:27