Introdução ao Docker: o que é, arquitetura, fluxo de trabalho
Publicados: 2020-04-27Índice
História da virtualização
Não faz muito tempo, implantar um serviço era um processo lento e doloroso. O processo envolveu a escrita do código pela equipe de desenvolvimento e sua implantação pela equipe de operações em máquinas de metal. A equipe de operações costumava ter seu trabalho cortado, pois precisava procurar compiladores de linguagem, bibliotecas e patches para fazer o código funcionar.
Se o processo tivesse algum erro ou bug, teria que começar tudo de novo – a equipe de desenvolvimento corrigiria os bugs ou erros e a equipe de operações começaria novamente a implantar o código.
As coisas melhoraram um pouco quando os Hypervisors foram desenvolvidos. Então, o que são hipervisores? Trata-se de uma coleção de máquinas virtuais (VMs) que podem estar continuamente em execução ou desligadas em intervalos regulares, especialmente quando não estão em uso. As máquinas virtuais definitivamente ajudaram acelerando o processo de correção de erros e implantação de código, mas ainda apresentavam alguns problemas. Os contêineres do Docker vieram como os verdadeiros divisores de águas. Eles até abordaram os problemas que existiam nas máquinas virtuais.
Leia: Kubernetes vs. Docker: diferenças primárias
O que é Docker?
É uma plataforma de código aberto usada por desenvolvedores em todo o mundo para executar, empacotar e distribuir aplicativos. O Docker torna o processo de encapsulamento de aplicações do primeiro ao último passo, muito fácil e eficiente. Para entender melhor o Docker, você terá que entender o que são containers e como eles funcionam.
Um contêiner nada mais é do que um pacote autônomo, leve e executável de uma parte do software que vem com tudo o que é necessário para executá-lo. Os contêineres não são de forma alguma dependentes das plataformas. Portanto, o Docker é compatível com máquinas baseadas em Windows e Linux. Além disso, você pode até executar o Docker em uma máquina virtual, se necessário. O objetivo básico que o Docker visa alcançar é permitir que os desenvolvedores usem a arquitetura distribuída para executar aplicativos de microsserviço.

Ao contrário das máquinas virtuais que costumavam realizar a abstração de hardware, o Docker sobe um nível e executa a abstração de um conjunto diferente de recursos no nível do SO. Isso oferece vários benefícios, incluindo separação de infraestrutura e portabilidade de aplicativos, entre outros. Em outras palavras, diferentemente das máquinas virtuais que costumavam abstrair o servidor de hardware, a abordagem baseada em contêiner do Docker funciona abstraindo o núcleo do SO. Essa é uma ótima alternativa à virtualização que leva à criação mais rápida de instâncias leves. O Docker está disponível em duas versões:
Edição Empresarial (EE):
Esta versão foi projetada especificamente para equipes de TI e desenvolvimento empresarial. Esta versão é usada para desenvolver, enviar e executar aplicativos.
Edição da Comunidade (CE):
Esta versão é usada por indivíduos e pequenas equipes que estão explorando aplicativos baseados em contêiner ou começando com o Docker.
Leia: Ideias e tópicos de projetos de pilha completa
Fluxo de trabalho do Docker
Nesta seção, vamos nos concentrar no Docker Engine, bem como em seus diferentes componentes. Isso nos ajudará a entender melhor como o Docker funciona antes de passarmos para a arquitetura do Docker. O Docker Engine é o poder que permite o desenvolvimento para executar várias funções usando este aplicativo baseado em contêiner. Você pode usar os componentes listados abaixo para criar, empacotar, enviar e executar aplicativos.
1. Daemon Docker
É o processo em segundo plano que trabalha continuamente para ajudá-lo a gerenciar imagens, volumes de armazenamento, redes e contêineres. Ele está sempre procurando solicitações de API do Docker para processá-las.
2. CLI do Docker
É um cliente de interface que interage com o Docker Daemon. Ele ajuda os desenvolvedores a simplificar o processo de gerenciamento de instâncias de contêiner. É uma das principais razões pelas quais os desenvolvedores preferem o Docker a outros aplicativos semelhantes .

3. API Rest do Docker Engine
Ele facilita as interações entre o daemon do Docker e os aplicativos. Geralmente, é necessário um cliente HTTP para acessar essas APIs.
Arquitetura do Docker
A arquitetura Docker é uma arquitetura baseada em cliente-servidor. Ele tem três componentes principais que são mencionados abaixo:
- Host do Docker
- Cliente Docker
- Registro do Docker
- Objetos do Docker
Na fase inicial, o cliente Docker interage com o daemon, que é responsável por realizar grande parte do trabalho de desenvolvimento, execução e distribuição de contêineres Docker.
O daemon do Docker e o cliente podem ser executados em um único sistema ou o desenvolvedor pode usar um daemon remoto para conectá-lo a um cliente Docker local. A API Rest é usada para estabelecer a comunicação entre o daemon do Docker e o cliente. Isso pode ser feito por meio de uma interface de rede ou soquetes UNIX.
Vamos agora discutir os componentes da arquitetura do Docker em detalhes.
Leia também: Por que se tornar um desenvolvedor Full Stack?
1. Host do Docker
Um host do Docker é responsável por executar o daemon do Docker. O Docker Daemon atende a solicitações de API, incluindo construção e execução do docker, entre outros. Ele também gerencia imagens, redes, contêineres e outros objetos do Docker. Os daemons podem se comunicar entre si para gerenciar diferentes serviços do Docker.
2. Cliente Docker
Não é nada além do método que os usuários usam para interagir com o Docker. O cliente Docker envia nossas solicitações, como docker run, e o Docker compila para o daemon do Docker. Um recurso muito importante do cliente Docker é que ele pode se comunicar com vários daemons.
3. Registro Docker
Um registro é um aplicativo do lado do servidor que é escalável e sem estado. Ele não apenas armazena imagens do Docker, mas também permite que os desenvolvedores as distribuam. O Docker nos fornece a flexibilidade de criar nossas próprias imagens, ou existem registros públicos disponíveis que podemos usar. Esses registros incluem Docker Cloud e Docker Hub , entre outros.
A configuração do Docker é tal que sempre recorre ao Docker Hub e outros registros públicos para procurar imagens. No entanto, temos a opção de criar nosso próprio registro. Assim, podemos extrair as imagens necessárias usando nossos próprios registros com a ajuda dos comandos docker run e docker pull. O comando push do Docker envia a imagem necessária para o registro que criamos.

4. Objetos do Docker
Usamos e criamos vários objetos enquanto usamos o Docker. Esses objetos incluem contêineres, imagens, plugins, volumes, redes e outros.
5. Imagens do Docker
Uma imagem do Docker nada mais é do que um modelo somente leitura que nos fornece as instruções necessárias para criar um contêiner. Em muitas ocasiões, uma imagem tem uma conexão com outra imagem. O que diferencia duas imagens é a camada adicional de personalização. Em outras palavras, uma imagem também pode ser definida como um instantâneo imutável de um contêiner. As imagens são pequenas, leves e rápidas.
6. Contêineres Docker
Vamos seguir uma abordagem diferente para entender os contêineres do Docker. Então, se uma imagem pudesse ser usada para representar uma classe, um container poderia ser sua instância. Em outras palavras, um contêiner é um objeto de tempo de execução. Podemos criar, iniciar, mover, parar ou excluir contêineres com a ajuda do Docker CLI ou API. Os contêineres também podem ser anexados ao armazenamento e conectados a uma ou mais de uma rede. Dependendo do estado atual de um contêiner, também podemos criar uma nova imagem.
Conclusão
Agora que você sabe o que é a arquitetura do Docker e seus componentes, está em uma posição melhor para entender o aumento de sua popularidade. Ele simplifica o gerenciamento de infraestrutura e ajuda a tornar as instâncias mais rápidas, leves e resilientes.
Se você estiver interessado em aprender mais sobre codificação full stack, confira o PG Diploma in Full-stack Software Development da upGrad & IIIT-B, projetado para profissionais que trabalham e oferece mais de 500 horas de treinamento rigoroso, mais de 9 projetos e atribuições, Status de ex-aluno do IIIT-B, projetos práticos práticos e assistência de trabalho com as principais empresas.