Conteúdo
O que é Docker? Imagens, contêineres e como tudo funciona (tutorial para iniciantes)
- 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
| Conceito | O que é | Analogia |
|---|---|---|
| Imagem (Image) | Um modelo somente leitura que contém o programa, bibliotecas e configurações | Disco de instalação |
| Contêiner (Container) | Uma instância em execução iniciada a partir de uma imagem | Programa instalado pelo disco e em execução |
| Registry | Lugar onde imagens são armazenadas e compartilhadas, como o Docker Hub | App Store |
Imagens e contêineres
- 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):
- Camada do sistema operacional base (por exemplo, Debian)
- Camada do ambiente de execução do Node.js
- Camada de instalação dos pacotes (
npm install) - 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
Quando você digita o comando docker no terminal, há três componentes envolvidos:
| Componente | Descriçã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 |
| Registry | O 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
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êiner | Máquina virtual | |
|---|---|---|
| Tempo de inicialização | Geralmente menos de 1 segundo | Geralmente de dezenas de segundos a vários minutos |
| Tamanho | De alguns MB a centenas de MB | Geralmente vários GB |
| Grau de isolamento | No nível do processo; compartilha o kernel | Sistema operacional completo; isolamento mais rigoroso |
| Quantos podem rodar no mesmo host | Muitos | Menos |
| É 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 runem 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