Vamos explorar a estrutura do Docker e seus elementos fundamentais.
Presumo que você já possua uma compreensão básica sobre o Docker. Caso contrário, você pode consultar este artigo anterior para se familiarizar.
Certamente, você reconhece a importância do Docker no contexto do DevOps. Agora, por trás dessa ferramenta notável, deve haver uma arquitetura bem estruturada e engenhosa, não concorda?
Antes de abordarmos esse aspecto, permitam-me apresentar os sistemas de virtualização, tanto os antigos quanto os contemporâneos.
Virtualização Tradicional vs. Virtualização de Nova Geração
Antigamente, era comum estabelecermos máquinas virtuais, cada qual com um sistema operacional próprio, o que demandava muito espaço e tornava o processo pesado.
Hoje, com os contêineres Docker, desfrutamos de um único sistema operacional, e os recursos são compartilhados entre os contêineres. Isso resulta em uma solução mais leve e com inicialização mais rápida.
Estrutura do Docker
A seguir, apresento um diagrama simplificado da arquitetura do Docker.
Deixe-me detalhar os componentes de uma arquitetura Docker.
Motor do Docker
Essa é a parte central de todo o sistema Docker. O Motor do Docker é um aplicativo que opera sob a arquitetura cliente-servidor e é instalado na máquina host. Dentro do Motor do Docker, encontramos três componentes:
- Servidor: É o daemon do Docker, chamado dockerd, que tem a capacidade de criar e gerenciar imagens Docker, contêineres, redes e outros elementos.
- API Rest: É utilizada para instruir o daemon do Docker sobre quais ações realizar.
- Interface de Linha de Comando (CLI): É um cliente que serve para inserir comandos do Docker.
Cliente Docker
Os usuários do Docker interagem com a ferramenta através de um cliente. Quando um comando Docker é executado, o cliente o envia para o daemon dockerd, que o executa. A API do Docker é utilizada por esses comandos. O cliente Docker pode se comunicar com vários daemons.
Registros do Docker
Este é o local onde as imagens do Docker são armazenadas. Pode ser um registro público ou privado. O Docker Hub é o repositório padrão para imagens, sendo um registro público. Mas você também pode estabelecer e executar seu próprio registro particular.
Ao usar os comandos `docker pull` ou `docker run`, a imagem do Docker necessária é obtida do registro configurado. Quando você executa o comando `docker push`, a imagem é armazenada no registro.
Objetos do Docker
Ao trabalhar com o Docker, você usa imagens, contêineres, volumes e redes. Todos estes são considerados objetos do Docker.
Imagens
As imagens do Docker são modelos de leitura somente, que contêm instruções para criar um contêiner Docker. Uma imagem pode ser obtida de um Docker Hub e usada diretamente, ou você pode adicionar instruções a uma imagem base para criar uma nova imagem modificada. Você também tem a opção de criar suas próprias imagens usando um Dockerfile. Ao criar um Dockerfile com as instruções para construir e executar um contêiner, você gera sua imagem Docker personalizada.
Uma imagem do Docker possui uma camada base, que é somente leitura, e uma camada superior que pode ser alterada. Ao modificar um Dockerfile e reconstruí-lo, apenas as alterações são reconstruídas na camada superior.
Contêineres
Após executar uma imagem do Docker, um contêiner é criado. Os aplicativos e seus respectivos ambientes rodam dentro desse contêiner. Você pode usar a API ou a CLI do Docker para iniciar, interromper e excluir um contêiner Docker.
A seguir, um comando de exemplo para executar um contêiner Docker baseado no Ubuntu:
docker run -i -t ubuntu /bin/bash
Volumes
Os dados persistentes gerados e usados por contêineres Docker são armazenados em Volumes. Estes são gerenciados pelo Docker através da CLI ou API. Volumes funcionam em contêineres Windows e Linux. Ao invés de persistir dados na camada de escrita de um contêiner, é preferível usar volumes. O conteúdo de um volume persiste fora do ciclo de vida do contêiner, não aumentando seu tamanho.
Você pode usar os flags `-v` ou `–mount` para iniciar um contêiner com um volume. O comando a seguir exemplifica o uso de um volume chamado `geekvolume` com o contêiner `etechpt.com`.
docker run -d --name etechpt.com -v geekvolume:/app nginx:latest
Redes
A rede Docker é o canal pelo qual todos os contêineres isolados se comunicam. Existem cinco drivers principais de rede no Docker:
- Bridge: Driver padrão para contêineres, usado quando seus aplicativos rodam em contêineres independentes que se comunicam no mesmo host Docker.
- Host: Remove o isolamento de rede entre contêineres e o host, útil quando não se precisa de isolamento.
- Overlay: Permite que serviços de swarm se comuniquem entre si, usado em contêineres rodando em diferentes hosts ou em serviços de swarm com múltiplas aplicações.
- None: Desativa completamente a rede.
- macvlan: Atribui endereços MAC aos contêineres, fazendo-os parecer dispositivos físicos, útil ao migrar configurações de VMs.
Conclusão
Espero que isso ofereça um panorama da arquitetura do Docker e seus componentes essenciais. Explore mais sobre o Docker e, caso esteja interessado em um treinamento prático, confira este Curso de Docker.
Apreciou a leitura? Que tal compartilhar com seus contatos?