Conteúdo

O que é Docker? Imagens, contêineres e como tudo funciona (tutorial para iniciantes)

Logotipo da baleia do Docker
Docker
Desenvolvedor
Docker, Inc.
Primeiro lançamento
2013
Linguagem de desenvolvimento
Go
Licença
Docker Engine é um software de código aberto (Apache License 2.0); Docker Desktop é um software comercial, gratuito para uso pessoal e pequenas empresas
Site oficial
www.docker.com
Documentação oficial
docs.docker.com

Docker foi lançado pela Docker, Inc. (anteriormente dotCloud) em 2013. O núcleo, Docker Engine, é um projeto de código aberto desenvolvido em Go. A lista completa do site, da documentação e do código-fonte está em Recursos oficiais na página inicial do tutorial.

Que problema o Docker resolve

Quase todo mundo que programa já passou por isto: o programa funciona bem no próprio computador, mas dá erro no computador de um colega ou em um servidor. Em geral, a causa é um ambiente diferente:

  • A versão do Python não é a mesma (você usa 3.14, mas o servidor ainda está no 3.10)
  • Falta uma biblioteca do sistema
  • Arquivos de configuração, variáveis de ambiente ou caminhos de pastas são diferentes
  • Dois projetos no mesmo servidor precisam de versões diferentes do mesmo pacote

A abordagem tradicional é escrever instruções de instalação longas e seguir cada etapa em cada máquina, mas alguém sempre acaba esquecendo alguma coisa.

Com Docker, você empacota o programa junto com o ambiente em que ele é executado. O pacote funciona da mesma forma em qualquer máquina com Docker instalado. As instruções de instalação viram um único comando:

docker run -d -p 8080:80 nginx:1.30

Seja em um servidor Windows, macOS ou Linux, esse comando inicia o mesmo servidor web nginx.

Três conceitos centrais

ConceitoO que éAnalogia
Imagem (Image)Um modelo somente leitura que contém o programa, bibliotecas e configuraçõesDisco de instalação
Contêiner (Container)Uma instância em execução iniciada a partir de uma imagemPrograma instalado pelo disco e em execução
RegistryLugar onde imagens são armazenadas e compartilhadas, como o Docker HubApp Store

Imagens e contêineres

Uma imagem pode iniciar vários contêineres
Uma imagem é formada por várias camadas somente leitura; cada docker run cria um novo contêiner, com sua própria camada gravável, processo e rede
  • Uma imagem pode iniciar vários contêineres ao mesmo tempo, sem que interfiram entre si.
  • Os arquivos adicionados ou alterados no contêiner são gravados na camada gravável dele e não modificam a imagem.
  • Se você excluir o contêiner, a imagem continua disponível para iniciar outro quando quiser.
  • Como a camada gravável desaparece quando o contêiner é excluído, os dados que precisam ser preservados (como os de um banco de dados) devem ficar em um Volume.

Imagens são formadas por camadas

Uma imagem é formada por várias camadas (layers). Veja o exemplo de um site em Node.js (à esquerda na imagem acima):

  1. Camada do sistema operacional base (por exemplo, Debian)
  2. Camada do ambiente de execução do Node.js
  3. Camada de instalação dos pacotes (npm install)
  4. Camada do seu código

Imagens diferentes podem compartilhar as mesmas camadas inferiores: se dez imagens usam Debian como base, a camada do Debian é armazenada no disco uma única vez e baixada uma única vez. Esse também é o motivo para prestar atenção à ordem dos comandos ao escrever um Dockerfile. Depois de instalar o Docker na próxima seção, você verá as camadas sendo baixadas, uma a uma, ao baixar uma imagem.

Registry

Um Registry é um servidor que armazena imagens. O mais usado é o Docker Hub (docker.io); quando você executa docker run nginx sem indicar um endereço, a imagem é baixada do Docker Hub. Outros exemplos comuns são o ghcr.io do GitHub e os Registries de plataformas de nuvem. Você também pode enviar suas próprias imagens para lá; veja Enviar para o Docker Hub.

Arquitetura do Docker

Arquitetura do Docker: Client, Docker Engine e Registry
O comando docker envia solicitações pela API ao Docker Engine, que baixa imagens e cria e gerencia contêineres

Quando você digita o comando docker no terminal, há três componentes envolvidos:

ComponenteDescrição
Docker CLI (Client)A ferramenta de linha de comando docker que você usa. Ela não executa contêineres; apenas envia solicitações ao Engine
Docker Engine (dockerd)Um serviço executado em segundo plano, responsável por baixar imagens, criar contêineres e gerenciar redes e Volumes
RegistryO local onde as imagens ficam armazenadas. O Engine baixa (pull) ou envia (push) imagens para lá

CLI e Engine são separados. Assim, você pode usar o comando docker no seu notebook para controlar o Engine de um servidor remoto (veja Implantar em um host na nuvem). Na próxima seção, ao executar docker version, você verá as versões de Client e Server: são esses dois componentes.

No Windows e no macOS, o Docker Engine precisa de um ambiente Linux para funcionar. O Docker Desktop cria automaticamente uma máquina virtual Linux leve para executar o Engine e também instala ferramentas como CLI e Compose. No Linux, basta instalar o Docker Engine diretamente.

Qual é a diferença entre contêineres e máquinas virtuais

Comparação da arquitetura de contêineres e máquinas virtuais
Contêineres compartilham o kernel do sistema operacional do host; cada máquina virtual inclui um sistema operacional completo

Uma máquina virtual (VM) simula um computador inteiro, cada uma com seu próprio sistema operacional completo. Já os contêineres compartilham o kernel do sistema operacional do host e isolam apenas o que o programa precisa (sistema de arquivos, processos e rede).

ContêinerMáquina virtual
Tempo de inicializaçãoGeralmente menos de 1 segundoGeralmente de dezenas de segundos a vários minutos
TamanhoDe alguns MB a centenas de MBGeralmente vários GB
Grau de isolamentoNo nível do processo; compartilha o kernelSistema operacional completo; isolamento mais rigoroso
Quantos podem rodar no mesmo hostMuitosMenos
É possível executar sistemas operacionais diferentes?Só sistemas com o mesmo kernel do host (contêineres Linux precisam de um kernel Linux)Sim. Por exemplo, Windows em um host Linux

Contêineres não substituem máquinas virtuais. Muitos serviços de nuvem executam contêineres dentro de máquinas virtuais; os dois são usados juntos com frequência.

Para que serve o Docker

  • Ambiente de desenvolvimento: inicie bancos de dados, caches e outros serviços com um comando, sem instalar vários programas no computador.
  • Padronização do ambiente: integrantes da equipe, ambiente de testes e produção usam a mesma imagem.
  • Implantação: empacote o programa em uma imagem e coloque-o no ar com docker run em qualquer servidor. Para reverter uma versão, basta voltar à imagem anterior.
  • Experimentar softwares: quer testar um banco de dados ou uma ferramenta? Inicie um contêiner e exclua-o quando terminar. Seu computador continua limpo.

Resumo

  • Docker empacota o programa e seu ambiente juntos para resolver o problema de "inconsistência entre ambientes"
  • Uma imagem é um modelo somente leitura, um contêiner é uma instância em execução e um Registry armazena imagens
  • O comando docker (Client) envia solicitações para o Docker Engine executar
  • Contêineres são mais leves e iniciam mais rápido que máquinas virtuais, mas compartilham o kernel do host

Na próxima seção, vamos instalar o Docker no seu computador.

Exercícios

Exercício 1: Explique em uma frase a diferença entre imagem e contêiner.

Resposta

Uma imagem é um modelo somente leitura (como um disco de instalação); um contêiner é uma instância em execução iniciada a partir da imagem (como um programa instalado e em execução). Uma imagem pode iniciar vários contêineres.

Exercício 2: O que acontece com os arquivos adicionados a um contêiner quando ele é excluído? Como você pode preservar os dados necessários?

Resposta

Eles desaparecem junto com a camada gravável do contêiner. Os dados que precisam ser preservados devem ficar em um Volume, cujo ciclo de vida é independente do contêiner.

Perguntas frequentes

Docker é gratuito?

Docker Engine e CLI são gratuitos e de código aberto. Docker Desktop é gratuito para uso pessoal, educação, projetos de código aberto não comerciais e pequenas empresas. Empresas maiores precisam de uma assinatura paga. Consulte [Instalar o Docker](/pt/docker/install/).

Preciso saber Linux antes de aprender Docker?

Conhecer alguns comandos básicos (cd, ls e edição de arquivos) ajuda, mas você não precisa ter muita experiência. Este tutorial explica os comandos; basta acompanhar.

Qual é a relação entre Docker e Kubernetes?

Docker constrói imagens e executa contêineres em um único host. Kubernetes agenda, escala e gerencia muitos contêineres em vários hosts. Aprenda Docker primeiro e depois Kubernetes.

Atualizado 14 de outubro de 2026