← Todas as questões
O que é Docker e como funciona?
FrequentementeInicianteDevOps

O que é Docker e como funciona?

Resposta curta
Docker é uma plataforma aberta para empacotar e executar aplicativos como contêineres: processos isolados que compartilham o kernel Linux do host (via namespaces e cgroups) em vez de precisar de uma máquina virtual completa. Ele usa um modelo cliente-servidor: o O cliente docker envia comandos por meio de uma API REST para o daemon dockerd, que constrói imagens e executa contêineres a partir delas.

Por que ele existe. O Docker permite empacotar um aplicativo com todas as suas dependências (bibliotecas, configuração, tempo de execução) em um único artefato — uma imagem — e executá-lo de forma idêntica em um laptop de desenvolvedor, em CI e em produção. Isso resolve o problema clássico de “funciona na minha máquina”.

Contêineres versus máquinas virtuais. Uma VM virtualiza o hardware e envia um sistema operacional convidado inteiro com seu próprio kernel. Um contêiner é um processo isolado que usa o kernel do host. Como resultado, os contêineres são mais leves, iniciam em frações de segundo e utilizam menos recursos. Mas um contêiner não é uma VM leve: ele está vinculado ao kernel do host e seu limite de isolamento é mais fraco que o de uma VM. Uma VM tem isolamento imposto por hardware, enquanto uma vulnerabilidade no kernel compartilhado pode potencialmente escapar de um contêiner – essa é a compensação pela velocidade e densidade. O host deve corresponder ao tipo de contêiner: os contêineres Linux precisam de um kernel Linux, os contêineres Windows precisam de um kernel Windows. No macOS e no Windows, o Docker Desktop executa de forma transparente uma pequena VM Linux (por exemplo, via WSL2), de modo que os contêineres Linux compartilham o kernel dessa VM, não o kernel do seu sistema operacional.

Arquitetura (cliente-servidor). De acordo com a documentação do Docker:

  • O cliente docker é a principal forma de interação dos usuários com o Docker; comandos como docker run são enviados para o daemon.
  • O daemon dockerd "faz o trabalho pesado" de construção, execução e distribuição de contêineres e gerencia objetos como imagens, contêineres, redes e volumes.
  • O cliente se comunica com o daemon por meio de uma API REST por meio de um soquete UNIX ou de uma interface de rede, para que possam ser executados em máquinas diferentes.
  • Um registro armazena imagens; o público padrão é Docker Hub.

Imagens e contêineres. Uma analogia útil: uma imagem é como uma classe (ou um programa em disco) e um contêiner é uma instância dela (um processo em execução); você pode iniciar vários contêineres a partir de uma imagem.

  • Uma imagem é um modelo somente leitura com instruções para criar um contêiner, criado a partir de camadas. É definido por um Dockerfile; quando você altera, apenas as camadas alteradas são reconstruídas.
  • Um container é uma instância executável de uma imagem. No topo das camadas somente leitura da imagem, ele adiciona uma fina camada gravável (cópia na gravação); qualquer coisa escrita lá é perdida quando o contêiner é removido – e é exatamente por isso que os dados persistentes precisam de volumes.

Como funciona o isolamento (nos bastidores). dockerd não chama o kernel diretamente — ele delega o gerenciamento do ciclo de vida do contêiner para containerd, que invoca um tempo de execução OCI; no Docker o padrão é runc, mas o tempo de execução é conectável (crun, gVisor, Kata, etc.). O isolamento real vem dos recursos do kernel Linux:

  • namespaces isolam recursos (de acordo com a página man7 existem 8 tipos: PID, rede, montagem, UTS, IPC, usuário, cgroup, tempo). Um processo apenas “vê” seus próprios PIDs, sua própria pilha de rede e assim por diante.
  • cgroups (grupos de controle) limitam e contabilizam o uso de recursos (CPU, memória, E/S).

Acompanhamentos comuns. As camadas de imagem são armazenadas em cache; docker compose executa aplicativos de vários contêineres; os dados persistem por meio de volumes (um contêiner é efêmero por padrão); e a OCI padroniza o formato da imagem (especificação de imagem), o tempo de execução (especificação de tempo de execução) e o protocolo de distribuição de registro (especificação de distribuição) — essas três especificações mantêm o ecossistema interoperável.

ContêineresDocker

Baixe agora e experimente grátis nas suas tarefas!

Baixar para Windows
10 15 créditos grátis • Não precisa de cartão de créditoVersão: Carregando…

Sem instalação - baixe e execute. Sem cadastro - entre com Google.