Cloud

O que é o Docker?

O que é o Docker?

Você já ouviu o termo e foi cercado pela motivação da “dockerização”, mas se você está apenas procurando uma explicação simples, você veio ao artigo certo.

O Docker não é um termo novo para a maioria de nós, está em toda parte. Mas o que exatamente é o Docker?

Muito simplesmente, o Docker é uma plataforma de contêiner de software, o que significa que você pode construir seu aplicativo, empacotá-lo junto com suas dependências em um contêiner e, em seguida, esses contêineres podem ser facilmente enviados para serem executados em outras máquinas.

Ok, mas o que é containerização?

A containerização, também chamada de virtualização baseada em contêiner e contêiner de aplicativos, é um método de virtualização no nível do sistema operacional para implantar e executar aplicativos distribuídos sem iniciar uma VM inteira para cada aplicativo. Em vez disso, vários sistemas isolados, chamados contêineres, são executados em um único host de controle e acessam um único kernel.

Uma imagem de contêiner é um pacote executável leve e autônomo de um software que inclui tudo o que é necessário para executá-lo: código, tempo de execução, ferramentas do sistema, bibliotecas do sistema, configurações.

Portanto, o objetivo principal é empacotar o software em unidades padronizadas para desenvolvimento, expedição e implantação.

Por exemplo, suponha que exista uma aplicação Linux escrita em Scala e R. Assim, para evitar conflitos de versões para Linux, Scala e R, o Docker apenas encapsula este aplicativo em um container com todas as versões e dependências e implementa em qualquer sistema operacional ou servidor sem qualquer problema de versão.

Agora, tudo o que precisamos fazer é executar esse contêiner sem se preocupar com o software e as bibliotecas dependentes.

Então, o processo é muito simples. Cada aplicativo será executado em um contêiner separado e terá seu próprio conjunto de bibliotecas e dependências. Isso também garante que haja isolamento no nível do processo, o que significa que cada aplicativo é independente de outros aplicativos, garantindo aos desenvolvedores a possibilidade de criar aplicativos que não interfiram entre si.

Contêineres versus máquinas virtuais

Os contêineres são uma abstração na camada de aplicativo que agrupa código e dependências. Vários contêineres podem ser executados na mesma máquina e compartilhar o kernel do SO com outros contêineres, cada um sendo executado como processos isolados no espaço do usuário. Os contêineres ocupam menos espaço que as VMs (as imagens de contêiner geralmente têm dezenas de MBs) e começam quase instantaneamente.

Como você pode ver no caso, há um sistema operacional host e, em seguida, haverá contêineres com dependências e bibliotecas para cada aplicativo, o que torna o processamento e a execução muito rápidos. Não há sistema operacional convidado aqui e ele utiliza o sistema operacional de um host, compartilhando bibliotecas e recursos relevantes quando necessário, ao contrário das máquinas virtuais.

Máquinas virtuais (VMs) são uma abstração de hardware físico, transformando um servidor em vários servidores. O hypervisor permite que várias VMs sejam executadas em uma única máquina. Cada VM inclui uma cópia completa de um sistema operacional, um ou mais aplicativos, binários e bibliotecas necessários – ocupando dezenas de GB. As VMs também podem ser lentas para inicializar.

Nesse caso de virtualização, há um sistema operacional host no qual existem três sistemas operacionais convidados que não são nada além das máquinas virtuais. Mas a execução de várias máquinas virtuais no mesmo sistema operacional do host leva à degradação do desempenho, pois cada uma terá seu próprio kernel e um conjunto de bibliotecas e dependências. Isso ocupa uma grande quantidade de recursos do sistema, ou seja, disco rígido, processador e especialmente RAM.