O Docker é uma plataforma de código aberto (open source) que utiliza a tecnologia de containers para simplificar o desenvolvimento, a implantação e a execução de aplicações em ambientes computacionais isolados.
Neste artigo, vamos entender o que é um container, os principais conceitos relacionados a Docker e o impacto que essa plataforma tem no desenvolvimento de softwares e na hospedagem de sistemas.
Confira!
O que é um Container?
Um Container é uma forma de virtualização em nível de sistema operacional.
Diferentemente da virtualização por hipervisor (ex: VMware e Virtual Box) que cria máquinas virtuais completas com sistemas operacionais totalmente independentes, containers compartilham o kernel do sistema operacional do host, permitindo que múltiplas instâncias isoladas do espaço de usuário sejam executadas no mesmo ambiente.
Plataformas como o Docker reduzem drasticamente o overhead de recursos e podem acelerar o tempo de inicialização em comparação com máquinas virtuais.
Fonte: The Docker Book | James Turnbull
Para que serve o Docker?
O Docker é uma ferramenta poderosa que oferece isolamento por meio de containers.
Os containers criam ambientes computacionais isolados para testes e servem como “blocos de construção” consistentes e reutilizáveis para serviços.
Aqui estão alguns exemplos de como o Docker pode ser utilizado:
Ambiente de Testes
- Desenvolvedores podem criar, executar e compartilhar containers Docker em seus ambientes locais.
- Containers construídos no ambiente de desenvolvimento podem ser promovidos para testes e, posteriormente, para produção, garantindo consistência entre os estágios.
Self-Hosting
Execução de serviços e aplicações independentes
- Permite rodar serviços e aplicações de forma consistente em diferentes ambientes.
- Ideal para arquiteturas orientadas a serviços e implantações baseadas em microserviços.
Desenvolvimento de Aplicações
Implantações de Alta Performance
Testes isolados em integrações contínuas (CI)
- Ferramentas como Jenkins CI utilizam o Docker para criar instâncias isoladas para execução de testes.
- Reduz o risco de interferências entre testes e melhora a confiabilidade do processo de CI.
Construção e teste de arquiteturas complexas
- Permite replicar e testar aplicações complexas em um host local antes de implantá-las em ambientes de produção.
Criação de infraestruturas multiusuário no estilo Platform-as-a-Service (PaaS)
- Docker pode ser a base para construir plataformas que suportam múltiplos usuários e serviços.
Ambientes leves e independentes para aprendizado e desenvolvimento
- Ideal para criar sandboxes isolados para:
- Testar tecnologias como shells Unix.
- Aprender e ensinar linguagens de programação.
- Realizar experimentos sem impactar o sistema principal.
Aplicações SaaS (Software como Serviço)
- Docker pode ser utilizado para criar e implantar aplicações SaaS, permitindo gerenciamento eficiente e escalabilidade.
Implantações de alta performance e hiperescaláveis
- Containers são extremamente leves, permitindo que múltiplos hosts sejam configurados rapidamente para atender a demandas em grande escala.
Como funciona o Docker?
O Docker introduz um mecanismo de implantação de aplicações sobre um ambiente de execução baseado em containers virtualizados.
Esse mecanismo proporciona um fluxo de trabalho eficiente que facilita a transição do código do ambiente de desenvolvimento local para o ambiente de testes e para a produção.
Arquitetura Docker
O Docker utiliza uma arquitetura baseada no modelo cliente-servidor.
O cliente Docker se comunica com o servidor docker (daemon), responsável por realizar as operações mais complexas, como criar, executar e distribuir contêineres Docker.
O cliente e o daemon Docker podem ser executados no mesmo sistema ou de forma remota, onde o cliente se conecta a um daemon localizado em outra máquina.
A comunicação entre cliente e daemon utiliza uma API REST, que pode operar via UNIX sockets ou interfaces de rede.
Cliente Docker
O cliente Docker (docker
) é a principal interface utilizada pelos usuários para interagir com o Docker.
Quando você executa comandos como docker run
, o cliente envia essas instruções ao daemon (dockerd
), que as executa.
O cliente Docker utiliza a API Docker e é capaz de se conectar a vários daemons simultaneamente.
Servidor Docker (Daemon)
O daemon Docker (dockerd
) escuta requisições da API Docker e gerencia objetos do Docker, como imagens, contêineres, redes e volumes.
Além disso, o daemon pode se comunicar com outros daemons para gerenciar serviços Docker em um ambiente distribuído.
Objetos Docker
Ao utilizar o Docker, você estará criando e manipulando objetos como imagens, contêineres, redes, volumes, plugins e outros.
Imagens
Uma imagem é um modelo de leitura (read-only) com instruções para criar um contêiner Docker.
Geralmente, uma imagem é baseada em outra imagem existente, com algumas personalizações. Por exemplo, é possível criar uma imagem baseada na imagem ubuntu
, adicionando o servidor web Apache, a aplicação que você deseja executar e as configurações necessárias para que ela funcione.
Você pode criar suas próprias imagens ou usar aquelas disponibilizadas por outros usuários em registros públicos.
Para construir uma imagem, é necessário criar um arquivo Dockerfile.
O Dockerfile utiliza uma sintaxe simples para definir os passos necessários para criar e executar a imagem.
Cada instrução no Dockerfile gera uma camada na imagem.
Ao modificar o Dockerfile e reconstruir a imagem, apenas as camadas alteradas são recriadas. Isso torna as imagens leves, pequenas e rápidas, especialmente em comparação com outras tecnologias de virtualização.
Containers
Um contêiner é uma instância executável de uma imagem.
É possível criar, iniciar, parar, mover ou excluir um contêiner utilizando a API Docker ou o Docker CLI.
Você também pode conectar um contêiner a uma ou mais redes, anexar armazenamento ou criar uma nova imagem com base no estado atual do contêiner.
Por padrão, os contêineres são bem isolados uns dos outros e do sistema anfitrião (host). É possível configurar o nível de isolamento de redes, armazenamento e outros subsistemas, dependendo das necessidades.
Um contêiner é definido pela sua imagem e pelas opções de configuração fornecidas ao criá-lo ou iniciá-lo.
Quando um contêiner é removido, qualquer alteração no seu estado que não esteja armazenada em um volume persistente será perdida.
Registros
Um registro Docker armazena imagens Docker.
O Docker Hub é um registro público padrão, disponível para qualquer usuário, onde o Docker busca imagens por padrão.
Além disso, é possível configurar e operar um registro privado.
Comandos como docker pull
ou docker run
fazem com que o Docker baixe as imagens necessárias do registro configurado.
Por outro lado, o comando docker push
permite enviar suas imagens para o registro configurado.