Skip to content

O que é Docker? Como funciona um Container?

Hoje, se você trabalha como programador e ainda não sabe o que é Docker, está super atrasado frente ao mercado de trabalho. Para que você entenda o que o Docker é, primeiro você precisa entender: qual problema motivou sua criação? Você já sabe o que é uma máquina virtual?

O que é uma máquina virtual?

Uma máquina virtual ou virtual machine é um recurso que nos permite, através de um software, criar outros ambientes de sistemas dentro de sistemas totalmente diferentes. Por exemplo, temos o sistema operacional Linux e Windows. Ambos os sistemas, tecnicamente são incompatíveis para várias coisas, como exemplo, tem softwares que rodam no Linux e que não rodam no Windows. Com uma máquina virtual, você pode por exemplo subir um sistema Linux completo dentro do Windows e vice-versa. Trazendo para uma linguagem mais popular, é como se fosse um computador dentro do outro. Ou vários computadores dentro de um. Dá para ter mais de uma máquina virtual em cada sistema operacional dependendo das suas capacidades físicas (CPU, memória, interface de hardware, etc..).

Uma das ferramentas de criação de máquinas virtuais mais conhecidas é o programa VirtualBox. Ele é gratuito e de código aberto, além de ser um programa compatível com os principais sistemas, como Windows, macOs e Linux. Tem várias empresas que fornecem outras máquinas virtuais, como exemplo temos disponíveis Citrix, Vmware, do grupo Dell-EMC, Microsoft Hyper-V e Oracle VM.

Como funciona uma máquina virtual?

Essa definição é o divisor de águas para o motivo do Docker ser tão popular e necessário nos dias de hoje. Resumidamente, tem um recurso nos sistemas chamado hipervisor que separa o hardware das máquinas virtualizadas onde o hipervisor cria e executa máquinas virtuais (VMs).

“Um hypervisor, também conhecido como monitor da máquina virtual, é um processo que cria e executa máquinas virtuais (VMs). Um hypervisor permite que um computador host ofereça suporte a várias VMs guest, compartilhando virtualmente seus recursos, como memória e processamento.”

Existem 2 tipos de hipervisor: o tipo 1, também chamado de hipervisor nativo ou Bare-metal, que é executado diretamente no hardware do host para gerenciar sistemas operacionais guest. Já o tipo 2 é chamado de Hosted e é executado em um sistema operacional convencional como uma camada de software ou aplicação. O primeiro é muito comum em ambientes corporativos, enquanto o segundo está mais próximos de usuários individuais que querem virtualizar outros tipos de sistemas operacionais, por exemplo em um único PC (computador pessoal).

Para se criar uma máquina virtual, temos que fazer a instalação desse hypervisor que gerencia o hardware físico, distribuindo recursos como processamento, espaço em disco, recursos de memória entre as diversas máquinas virtuais que estejam instaladas.

Quando surgiu o Docker? 

Por volta de 2013, a empresa dotClound, inc que se tornou Docker, inc, criou o Docker com a necessidade de melhoramento da grande demanda de máquinas virtuais. Como as máquinas virtuais dependem muito dos recursos físicos, eles precisavam criar um mecanismo que lhe desse melhores resultados sem necessariamente ter que ficar escalando máquinas físicas. Além disso, como os recursos em VMs são “divididos”, ainda havia situações em que aplicações poderiam ser corrompidas em algumas situações pelas próprias máquinas virtuais. parte destes problemas foram mitigados quanto criam o sistema LXC.

O sistema LXC foi criado um pouco antes, em 2008. essa tecnologia veio com o propósito de permitir a criação de instâncias de sistemas isoladas de um sistema operacional. As primeiras versões do Docker nada mais eram do que um wrapper do LXC integrado ao Union Filesystem (UnionFS). Estas instâncias isoladas em torno desse “embrulho”  é o que conceitua um container. Ou seja, através de recursos em containers, você consegue isolar o sistema operacional totalmente, o que vai dar independência aos sistemas utilizarem os recursos físicos das máquinas de forma “compartilhada”. 

Union Filesystem é um sistema de arquivos que implementa uma montagem de união para outros sistemas de arquivos. Ele permite que arquivos e diretórios de sistemas de arquivos diferentes, conhecidos como ramificações, sejam transparentemente sobrepostos, formando um único sistema de arquivos.

Como funciona um container no Docker?

Como falei anteriormente, pense no container como um ambiente isolado. O Docker é a  plataforma que vai agrupar e gerenciar e monitorar esses containers como se fosse um grande navio cargueiro.  O que permite esse isolamento, é que a tecnologia Docker utiliza o Kernel do Linux e recursos do kernel como Cgroups (Grupos de Controle) e namespaces para segregar processos o que faz com que gere uma independência na execução dos containers.  Basicamente, um container (independente da tecnologia) é formado por estes dois.

“o namespace oferece isolamento dos recursos e o cgroups impõe limites de recursos aos ambientes isolados”

Com estes insights conseguimos ter clareza na definição do que é o Docker. Podemos definir o Docker como uma plataforma open source que facilita a criação e administração de ambientes isolados através do empacotamento de aplicações ou ambientes dentro de container.  Essa versatilidade de isolamento é que permite sairmos de uma arquitetura de visualização como as VMs utilizam e passamos a utilizar containers ao invés.

O Docker utiliza um recurso chamado image, que é utilizado para criar uma espécie de template, tipo um modelo com um conjunto de instruções para a criação de um container.  Ou seja, em uma imagem Docker você tem uma declaração e organização de tudo o que é necessário para executar um aplicativo em contêiner, que podem incluir e não se limitar a códigos, arquivos de configurações, variáveis de ambiente, bibliotecas e runtimes.

Quais são os componentes do Docker?

A estrutura arquitetural do Docker é ridiculamente simples do ponto de vista da sua organização. Literalmente ele tem 3 elementos que o compõem: CLI, um Daemon e uma API de alto nível . O Docker utiliza uma CLI (Command-line interface ou Interface de linha de comandos) para executar ações em um componente chamado Daemon, que é utilizado para construir, executar e gerenciar os containers e a API de alto nível que permite ao usuário se comunicar com o Daemon. Além disso, tem um repositório remoto onde você consegue ter acessos a diversos tipos de imagens. Veremos com mais detalhes como utilizar o Docker na prática em outro artigo.

Conclusão

Espero que através desse artigo você consiga perceber a diferença entre uma máquina virtual e um container. Olhe para as camadas das arquiteturas de cada uma das abordagens e veja a relação de uso entre o sistema e os recursos de hardware e sistema operativo. Ambas as abordagens são métodos de virtualização, mas agem em camadas diferentes como ilustrado anteriormente. 

Agora falando de você como profissional, estamos atualmente em uma polarização com uma forte “romantização” a “não necessidade de conhecimento mais profundos” por parte de alguns programadores. isso no nosso ponto de vista é um absurdo! Quanto mais preparado você estiver, com uma base mais sólida conceitualmente, maior será seu campo de atuação na solução de problemas e na sua evolução profissional. Com vista enfrentarmos este problema, criamos um projeto chamado LDT (Let’s Dev Tech) que irá transformar você na sua melhor versão profissional de modo que você consiga alcançar a sua liberdade tech, onde você pode escolher onde quer estar profissionalmente. Mas para isso, você precisa se entregar aos desafios propostos pelas trilhas de forma séria e com esse pensamento de não continuar sendo um “programador mediano” ou “medíocre”.

Confiança Sempre!!!

Fontes:

Olá! Sou Walmir, engenheiro de software com MBA em Engenharia de Software e o cérebro por trás do GrowthCode e autor do livro "Além do Código". Se você acha que programação é apenas sobre escrever código, prepare-se para expandir seus horizontes. Aqui, nós vamos além do código e exploramos as interseções fascinantes entre tecnologia, negócios, artes e filosofia. Você está em busca de crescimento na carreira? Quer se destacar em um mercado competitivo? Almeja uma vida mais rica em conhecimento e realização? Então você chegou ao lugar certo. No GrowthCode, oferecemos insights profundos, estratégias comprovadas e um toque de sabedoria filosófica para catalisar seu crescimento pessoal e profissional.

Published inDockerInfraestrutura

Be First to Comment

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *