Qual é a diferença entre o Docker e uma máquina virtual (VM)?
Os contêineres Docker fornecem um serviço semelhante às máquinas virtuais, fornecendo um ambiente isolado para a execução de aplicativos, mas eles são basicamente duas tecnologias diferentes. Discutiremos as diferenças e o que torna o Docker tão útil.
O que torna o Docker tão útil?
O principal objetivo de uma máquina virtual é particionar um grande servidor em pedaços menores. A parte importante é que ele isola os processos em execução em cada VM. Por exemplo, seu provedor de hospedagem pode ter uma máquina de 32 núcleos e dividi-la em oito VMs de 4 núcleos que vende para clientes diferentes. Isso reduz os custos para todos e é ótimo se você estiver executando muitos processos ou precisar de acesso SSH total ao hardware subjacente.
No entanto, se você estiver executando apenas um aplicativo, pode estar usando mais recursos do que o necessário. Para executar esse único aplicativo, o hipervisor precisa ativar um sistema operacional convidado inteiro, o que significa que a máquina de 32 núcleos está executando oito cópias do Ubuntu. Além disso, você tem sobrecarga de máquina virtual para cada instância.
O Docker apresenta uma solução melhor. Os contêineres Docker oferecem isolamento sem a sobrecarga de máquinas virtuais. Cada contêiner é executado em seu próprio ambiente, separado com namespaces do Linux, mas a parte importante é que o código nos contêineres é executado diretamente na máquina. Não há emulação ou virtualização envolvida.
Ainda há um pouco de sobrecarga devido à rede e à interface com o sistema host, mas os aplicativos no Docker geralmente são executados perto de velocidades bare-metal e certamente muito mais rápido do que o VPS médio. Você não precisa executar 8 cópias do Ubuntu, apenas uma, o que torna mais barato executar vários contêineres do Docker em um host. Serviços como Elastic Container Service da AWS e Cloud Run do GCP fornecem maneiras de executar contêineres individuais sem provisionar um servidor subjacente.
Os contêineres empacotam todas as dependências que seu aplicativo precisa para ser executado, incluindo bibliotecas e binários que o sistema operacional usa. Você pode executar um contêiner CentOS em um servidor Ubuntu; ambos usam o kernel do Linux e a única diferença são os binários e bibliotecas incluídos para o sistema operacional.
A principal diferença com os contêineres do Docker é que geralmente você não terá acesso SSH ao contêiner. No entanto, você não precisa exatamente disso — a configuração é toda tratada pelo próprio arquivo do contêiner e, se quiser fazer atualizações, você &’ precisará enviar uma nova versão do contêiner.
Como toda essa configuração ocorre em código, ela permite que você use o controle de versão, como o Git, para o software do servidor. Como seu contêiner é uma única imagem, é fácil rastrear diferentes versões de seu contêiner. Com o Docker, seu ambiente de desenvolvimento será exatamente o mesmo que seu ambiente de produção e também o mesmo ambiente de desenvolvimento de todos os outros, aliviando o problema de “ ele está quebrado em minha máquina! ”
Se você quiser adicionar outro servidor ao cluster, não precisa se preocupar em reconfigurar esse servidor e reinstalar todas as dependências de que precisa. Depois de construir um contêiner, você pode facilmente gerar cem instâncias desse contêiner, sem muita configuração envolvida. Isso também permite um escalonamento automático muito fácil, o que pode economizar muito dinheiro.
Lados negativos do Docker
Obviamente, o Docker não substituirá as máquinas virtuais tão cedo. São duas tecnologias diferentes e as máquinas virtuais ainda têm muitas vantagens.
A rede geralmente envolve mais. Em uma máquina virtual, geralmente você tem hardware de rede dedicado exposto diretamente a você. Você pode configurar firewalls facilmente, definir aplicativos para escutar em certas portas e executar cargas de trabalho complicadas, como balanceamento de carga com HAProxy. No Docker, como todos os contêineres são executados no mesmo host, isso geralmente é um pouco mais complicado. Normalmente, porém, os serviços específicos de contêiner, como Elastic Container Service da AWS e GCP &’ s Cloud Run, fornecerão essa rede como parte de seu serviço.
O desempenho em sistemas operacionais não nativos ainda está no mesmo nível das máquinas virtuais. Você não pode executar um contêiner Linux em uma máquina host do Windows, então o Docker para Windows realmente usa um subsistema Windows para Linux VM para lidar com contêineres em execução. O Docker fornece essencialmente uma camada de abstração sobre a máquina virtual neste caso.
Dados persistentes também são um pouco complicados. Os contêineres do Docker são projetados para serem sem estado. Isso pode ser corrigido com montagens de volume, que montam um diretório no host para o contêiner, e serviços como ECS permitem que você monte volumes compartilhados. No entanto, isso não supera o armazenamento de dados em um servidor normal, e você não gostaria de tentar executar um banco de dados de produção no Docker.
Nenhum comentário