“10 minutos” no título é otimista se for a sua primeira vez mexendo com Docker, mas depois que você erra os mesmos dois ou três detalhes pela primeira vez, instalar e rodar o primeiro container de fato leva menos tempo que configurar um ambiente de desenvolvimento do jeito tradicional. Esse guia parte do zero: instalação, primeiro container, e principalmente os erros bobos que travam quem está começando.
Instalando o Docker
Windows e Mac
Baixe o Docker Desktop direto do site oficial (docker.com/products/docker-desktop). No Windows, ele vai pedir o WSL2 ativado — se você nunca configurou isso, o próprio instalador oferece para fazer automaticamente, mas às vezes exige reiniciar duas vezes (uma para o WSL, outra depois que ele termina de configurar o kernel do Linux). Não se assuste se isso acontecer.
Linux (Ubuntu/Debian)
Evite instalar pelo apt install docker.io do repositório padrão — geralmente é uma versão desatualizada. Use o script oficial:
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
Depois, o passo que praticamente ninguém lembra na primeira vez: adicionar seu usuário ao grupo docker, senão todo comando vai exigir sudo e alguns scripts de CI quebram por causa disso.
sudo usermod -aG docker $USER
Faça logout e login de novo (ou reinicie a sessão do terminal) para o grupo valer.
Rodando o Primeiro Container
Teste se está tudo certo:
docker run hello-world
Se aparecer a mensagem de boas-vindas do Docker, está funcionando. Agora um exemplo mais próximo do que você vai usar de verdade — subir um servidor web Nginx:
docker run -d -p 8080:80 --name meu-nginx nginx
Aqui está um detalhe que confunde muita gente: o -p 8080:80 mapeia a porta 8080 da sua máquina para a porta 80 dentro do container. Se você tentar acessar localhost:80 sem trocar, não vai funcionar — o serviço está rodando dentro do container na porta 80, mas por fora ele responde na porta que você escolheu no mapeamento (nesse caso, 8080).
Docker Compose: Quando Um Container Não é Suficiente
Na prática, quase nenhum projeto real usa só um container. Um ambiente de desenvolvimento típico tem banco de dados, aplicação e talvez um cache Redis rodando juntos. É aí que entra o docker-compose.yml:
version: '3.8'
services:
app:
build: .
ports:
- "3000:3000"
depends_on:
- db
db:
image: postgres:16
environment:
POSTGRES_PASSWORD: exemplo123
volumes:
- dados_db:/var/lib/postgresql/data
volumes:
dados_db:
Com esse arquivo salvo na pasta do projeto, basta rodar docker compose up -d (sem hífen entre docker e compose nas versões mais recentes) e os dois serviços sobem juntos, já conversando entre si pelo nome do serviço (db) como se fosse um hostname de rede interna.
Volumes: O Detalhe Que Salva Seus Dados
Reparou no volumes: dados_db:/var/lib/postgresql/data no exemplo acima? Sem isso, todo dado do banco desaparece quando você derruba o container com docker compose down. É o erro mais caro que gente iniciante comete: testar a aplicação por uma semana, acumular dados de teste importantes, rodar um down sem querer e perder tudo porque esqueceu do volume.
Problemas Comuns ao Configurar Docker
1. “Cannot connect to the Docker daemon” — no Linux, geralmente significa que o serviço não está rodando (sudo systemctl start docker) ou que seu usuário ainda não está no grupo docker (veja acima). No Windows/Mac, é o Docker Desktop que não abriu — confira o ícone na bandeja do sistema.
2. “Port is already allocated” — outra coisa já está usando aquela porta na sua máquina. Rode docker ps para ver se você mesmo já subiu um container nela antes e esqueceu de derrubar, ou troque a porta externa no mapeamento (ex: 8081:80 em vei de 8080:80).
3. Container “morre” sozinho segundos depois de subir — normalmente é porque o processo principal do container terminou (containers Docker ficam vivos enquanto o processo principal roda; se for um script que termina, o container também termina). Rode docker logs nome-do-container para ver o motivo real, quase sempre um erro de configuração que aparece claramente no log.
Comandos do Dia a Dia
docker ps— lista containers rodando (adicione-apara ver os parados também).docker stop nome/docker start nome— para e retoma um container sem apagar.docker exec -it nome bash— abre um terminal dentro do container rodando, essencial para debugar algo direto por dentro.docker system prune— limpa imagens e containers parados que estão acumulando espaço em disco; use com atenção, porque ele remove tudo que não está em uso ativo.
Perguntas Frequentes
Docker substitui uma máquina virtual?
Para a maioria dos casos de desenvolvimento, sim, e com bem menos overhead de recursos. Mas os dois têm propósitos diferentes — vale entender a diferença real entre Docker e virtualização tradicional antes de decidir qual usar em produção.
Preciso saber Linux para usar Docker no Windows?
Não profundamente, mas os comandos dentro dos containers costumam ser baseados em Linux mesmo quando você está no Windows — vale ter um contato mínimo com os comandos Linux mais usados no dia a dia.
Como sei se meus containers estão consumindo muita CPU ou memória?
docker stats mostra isso em tempo real direto no terminal. Para acompanhar isso de forma mais robusta, com histórico e alertas, o próximo passo natural é montar um monitoramento com Prometheus e Grafana.
Dá pra rodar Docker em um servidor com pouca RAM?
Dá, mas cada container carrega sua própria pilha de dependências, então em servidores com 1-2 GB de RAM é fácil o sistema começar a sofrer com 3 ou 4 containers simultâneos. Se o projeto crescer, vale considerar limitar recursos por container com as flags --memory e --cpus no comando run, em vez de deixar tudo competindo livremente pelos mesmos recursos.


