{"id":1631,"date":"2021-08-04T12:37:44","date_gmt":"2021-08-04T12:37:44","guid":{"rendered":"https:\/\/4linux.com.br\/?page_id=1631"},"modified":"2023-10-10T20:32:42","modified_gmt":"2023-10-10T20:32:42","slug":"diferenca-containers-maquinas-virtuais","status":"publish","type":"page","link":"https:\/\/4linux.com.br\/diferenca-containers-maquinas-virtuais\/","title":{"rendered":"Containers e VMs: Diferen\u00e7as e usos"},"content":{"rendered":"\n

Diferen\u00e7a entre Containers e M\u00e1quinas Virtuais<\/strong><\/h2>\n\n\n\n

Muita gente compara containers com m\u00e1quinas virtuais, e apesar dos containers n\u00e3o serem um substituto direto das m\u00e1quinas de virtuais, ambas as tecnologias possuem conceitos similares e talvez comparando-os lado a lado facilite a compreens\u00e3o.<\/p>\n\n\n\n

Se “m\u00e1quina virtual” \u00e9 um assunto novo para voc\u00ea, apenas imagine que uma m\u00e1quina virtual \u00e9 uma m\u00e1quina f\u00edsica transformada em software e que pode funcionar dentro de outros sistemas operacionais.<\/p>\n\n\n\n

Quando abordamos temas como virtualiza\u00e7\u00e3o ou mesmo containers, temos um conceito em comum, a m\u00e1quina hospedeira. A m\u00e1quina hospedeira \u00e9 a m\u00e1quina pela qual as m\u00e1quinas virtuais e\/ou os containers executam, j\u00e1 a m\u00e1quina convidada \u00e9 somente a m\u00e1quina virtual dentro de uma hospedeira.<\/p>\n\n\n\n

A figura abaixo vai nos ajudar a entender a diferen\u00e7a entre containers e m\u00e1quinas virtuais.<\/p>\n\n\n\n

\"\"<\/figure>\n\n\n\n

Primeira Camada<\/strong><\/h3>\n\n\n\n

No n\u00edvel mais baixo temos a infraestrutura, que pode ser nossa pr\u00f3pria m\u00e1quina ou um servidor.<\/p>\n\n\n\n

Segunda Camada<\/strong><\/h3>\n\n\n\n

Para m\u00e1quinas que rodar\u00e3o suas aplica\u00e7\u00f5es em containers temos apenas o sistema operacional, j\u00e1 para aqueles que rodar\u00e3o m\u00e1quinas virtuais temos a figura do Hypervisor, que pode ser o pr\u00f3prio sistema (XEN, KVM ou VMWare) ou uma aplica\u00e7\u00e3o dentro do sistema operacional (VirtualBox, KVM, Hyper-V).<\/p>\n\n\n\n

Terceira Camada<\/strong><\/h3>\n\n\n\n

N\u00e3o colocamos uma terceira camada nas m\u00e1quinas virtuais pois n\u00e3o h\u00e1 uma defini\u00e7\u00e3o clara a respeito de Hypervisors do tipo 1 e do tipo 2, principalmente com o surgimento do KVM. Do lado dos containers aparece a figura do Container Runtime, que no nosso caso podemos entender como o Docker que veremos mais adiante, mas \u00e9 interessante saber que existem outras ferramentas para criar containers no Linux.<\/p>\n\n\n\n

Container runtimes s\u00e3o implementa\u00e7\u00f5es de baixo n\u00edvel, elas que de fato criam os containers no sistema operacional, geralmente utilizados por uma Container Engine, por exemplo, o Docker, RKT, LXD ou CRI-O.<\/p>\n\n\n\n

\u00daltima Camada<\/strong><\/h3>\n\n\n\n

Na \u00faltima camada temos os nossos containers ou as nossas m\u00e1quinas virtuais, cada qual com suas devidas aplica\u00e7\u00f5es. As m\u00e1quinas virtuais s\u00e3o sistemas completos, com todos os seus processos, drivers e kernel, quando iniciam verificam se todo o hardware est\u00e1 funcional, fazem o boot do sistema operacional e ent\u00e3o come\u00e7am a rodar as aplica\u00e7\u00f5es. J\u00e1 os containers, por sua vez, apenas iniciam a aplica\u00e7\u00e3o, compartilhando o kernel com o sistema hospedeiro.<\/p>\n\n\n\n

Um pouco confuso? Bom, o aspecto mais b\u00e1sico que podemos notar \u00e9 que as m\u00e1quinas virtuais s\u00e3o sistemas operacionais completos somados a nossa aplica\u00e7\u00e3o e suas depend\u00eancias funcionando na m\u00e1quina hospedeira, enquanto os containers s\u00e3o praticamente apenas nossa aplica\u00e7\u00e3o e suas depend\u00eancias, utilizando o m\u00e1ximo poss\u00edvel de “coisas” da m\u00e1quina hospedeira.<\/p>\n\n\n\n

As M\u00e1quinas Virtuais v\u00e3o ‘morrer’?<\/p>\n\n\n\n

N\u00e3o, bem longe disso.<\/p>\n\n\n\n

Cada caso tem sua vantagem, explicaremos alguns casos a seguir do ponto de vista do Linux:<\/p>\n\n\n\n

Quando utilizar VMs:<\/p>\n\n\n\n