O que é Docker?

Início » O que é Docker?

O que é Docker? Como desenvolvedor, você provavelmente já ouviu falar do Docker em algum momento de sua vida profissional. E você provavelmente está ciente de que se tornou uma tecnologia importante para qualquer desenvolvedor de aplicativos e que você deve conhecer.

Se você não faz ideia do que estou falando, fique tranquilo pois o intuito desse artigo é justamente para falar sobre o Docker e porque você precisa conhecer essa tecnologia.

O que é Docker?

Docker é uma plataforma de software para construir aplicativos baseados em contêineres – ambientes de execução pequenos e leves que fazem uso compartilhado do Kernel do sistema operacional, mas são executados isoladamente um do outro. Embora os contêineres tenham sido usados ​​em sistemas Linux e Unix por algum tempo, o Docker, um projeto de código aberto lançado em 2013, ajudou a popularizar a tecnologia tornando mais fácil do que nunca para os desenvolvedores empacotar seus softwares para “construir uma vez e executar em qualquer lugar”.

Contêineres do Docker podem executar em qualquer lugar, localmente no datacenter do cliente, em um provedor de serviços externo ou na nuvem, no Azure. Os contêineres de imagem do Docker podem ser executados nativamente no Linux e no Windows. No entanto, imagens do Windows podem executar somente em hosts do Windows e imagens do Linux podem executar em hosts do Linux e hosts do Windows (usando uma VM do Linux do Hyper-V, até o momento), em que o host significa um servidor ou uma VM.

Os desenvolvedores podem usar ambientes de desenvolvimento no Windows, Linux ou macOS. No computador de desenvolvimento, o desenvolvedor executa um host Docker em que as imagens do Docker são implantadas, incluindo o aplicativo e suas dependências. Os desenvolvedores que trabalham no Linux ou no macOS usam um host do Docker que é baseado em Linux e podem criar imagens somente para contêineres do Linux. (Os desenvolvedores que trabalham no macOS podem editar código ou executar a CLI do Docker do macOS, mas no momento da redação deste artigo, os contêineres não são executados diretamente no macOS.) Os desenvolvedores que trabalham no Windows podem criar imagens para contêineres do Linux ou do Windows.

Leia também: 20 Comandos do Prompt de Comando do Windows (CMD) que você deve conhecer

O que são contêineres?

Containers, ou Linux Containers, são uma tecnologia que nos permite isolar certos processos do kernel e levá-los a pensar que são os únicos rodando em um computador completamente novo.

Diferente das máquinas virtuais, um contêiner pode compartilhar o kernel do sistema operacional, tendo apenas seus binários/bibliotecas diferentes carregados com ele.

Em outras palavras, você não precisa ter um sistema operacional totalmente diferente (chamado sistema operacional convidado) instalado dentro do sistema operacional host. Você pode ter vários contêineres em execução em um único sistema operacional sem ter vários sistemas operacionais convidados diferentes instalados.

Diferença entre máquinas virtuais e contêineres Docker (fonte: Docker)

Isso torna os contêineres muito menores, mais rápidos e mais eficientes. Enquanto uma VM pode levar cerca de um minuto para girar e pode pesar vários Gigabytes, um contêiner pesa, em média, 400 a 600 MB (os maiores).

Eles também levam apenas alguns segundos para girar. Isso ocorre principalmente porque eles não precisam girar um sistema operacional inteiro antes de executar o processo.

História dos contêiners

Os contêineres datam de pelo menos o ano de 2000 e as prisões do FreeBSD. O Oracle Solaris também tem um conceito semelhante chamado Zones, enquanto empresas como Parallels, Google e Docker têm trabalhado em projetos de código aberto como OpenVZ e LXC (Linux Containers) para fazer os contêineres funcionarem bem e com segurança.

Na verdade, poucos de vocês sabem disso, mas a maioria de vocês usa contêineres há anos. O Google tem seu próprio lmctfy de tecnologia de contêiner de código. Sempre que você usa alguma funcionalidade do Google – Pesquisa, Gmail, Google Docs, qualquer que seja – você recebe um novo contêiner.

O Docker, no entanto, é baseado no LXC. Como acontece com qualquer tecnologia de contêiner, no que diz respeito ao programa, ele tem seu próprio sistema de arquivos, armazenamento, CPU, RAM e assim por diante. A principal diferença entre contêineres e VMs é que, enquanto o hipervisor abstrai um dispositivo inteiro, os contêineres apenas abstraem o kernel do sistema operacional.

Isso, por sua vez, significa que uma coisa que os hipervisores de VM podem fazer e os contêineres não podem é usar diferentes sistemas operacionais ou kernels. Portanto, por exemplo, você pode usar o Microsoft Azure para executar as duas instâncias do Windows Server 2012 e do SUSE Linux Enterprise Server ao mesmo tempo. Com o Docker, todos os contêineres devem usar o mesmo sistema operacional e kernel.

Por outro lado, se tudo o que você deseja fazer é obter o máximo de instâncias de aplicativos de servidor em execução na menor quantidade de hardware, não dá a mínima para executar várias VMs de sistema operacional. Se você deseja várias cópias do mesmo aplicativo, você vai adorar os contêineres.

Essa mudança pode economizar dezenas de milhões de dólares anuais para um data center ou provedor de nuvem em custos de energia e hardware. Não é de admirar que eles estejam com pressa de adotar o Docker o mais rápido possível.

Por que usar o Docker?

Docker é tão popular hoje que “Docker” e “contêineres” são usados ​​alternadamente. Mas as primeiras tecnologias relacionadas a contêineres estiveram disponíveis por anos –  até décadas – antes do Docker ser lançado ao público em 2013.

Mais notavelmente, em 2008, o  LinuXContainers (LXC) foi implementado no kernel do Linux, habilitando totalmente a virtualização para uma única instância do Linux. Embora o LXC ainda seja usado hoje, tecnologias mais novas usando o kernel do Linux estão disponíveis. O Ubuntu, um sistema operacional Linux moderno e de código aberto, também oferece esse recurso.

O Docker aprimorou os recursos nativos de contêineres do Linux com tecnologias que permitem:

Portabilidade aprimorada e contínua:  enquanto os contêineres LXC costumam fazer referência a configurações específicas da máquina, os contêineres Docker são executados sem modificação em qualquer desktop, data center e ambiente de nuvem.

Atualizações ainda mais leves e granulares:  com o LXC, vários processos podem ser combinados em um único contêiner. Com os contêineres do Docker, apenas um processo pode ser executado em cada contêiner. Isso torna possível construir um aplicativo que pode continuar em execução enquanto uma de suas partes é desativada para uma atualização ou reparo.

Criação automatizada de contêiner: o Docker pode construir automaticamente um contêiner com base no código-fonte do aplicativo.

Controle de versão de contêiner: o Docker pode rastrear versões de uma imagem de contêiner, reverter para versões anteriores e rastrear quem construiu uma versão e como. Ele pode até mesmo carregar apenas os deltas entre uma versão existente e uma nova.

Reutilização de contêineres: os contêineres existentes podem ser usados ​​como imagens de base – essencialmente como modelos para a construção de novos contêineres.

Bibliotecas de contêineres compartilhados: os desenvolvedores podem acessar um registro de código-fonte aberto contendo milhares de contêineres contribuídos por usuários.

Hoje, a conteinerização do Docker também funciona com o servidor Microsoft Windows. E a maioria dos provedores de nuvem oferece serviços específicos para ajudar os desenvolvedores a construir, enviar e executar aplicativos em contêineres com Docker.

Por essas razões, a adoção do Docker explodiu rapidamente e continua a aumentar.

Conclusão

Esse artigo foi uma introdução ao Docker, espero que tenham gostado dessa leitura, façam bom uso do conhecimento e divulguem para amigos que não conhecem a tecnologia Docker.

brayan

Brayan Monteiro

Bacharel em Sistemas de Informação pela Faculdade Maurício de Nassau e desenvolvedor PHP. Além de programador, produzo conteúdo e gerencio blogs. Sou especialista em desenvolvimento de software, SEO de sites e em negócios digitais.

Deixe um comentário

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

five × 1 =