Docker: guia de melhores práticas e comandos mais utilizados

Conhece aqueles comandos Docker que pesquisa constantemente porque nunca decorou? Juntámos os principais num guia rápido, agrupados por categoria: imagens, containers, volumes, redes, logs e Docker Compose. Inclui também boas práticas em produção: imagens leves, utilizador não-root, secrets e manutenção.

Principais comandos do Docker – agrupados por categoria para facilitar a consulta no dia a dia.

1. Gestão de imagens

  • docker pull <imagem> – transfere uma imagem do Docker Hub (ou registry).
  • docker images – lista imagens locais.
  • docker rmi <imagem> – remove uma imagem.
  • docker build -t <nome>:<tag> . – cria imagem a partir do Dockerfile no diretório atual.
  • docker tag <imagem> <repo>:<tag> – renomeia/etiqueta uma imagem.
  • docker push <repo>:<tag> – envia imagem para o registry.

2. Containers (execução)

docker run <imagem> – cria e executa um container. Principais opções:

Flag O que faz
-d Executa em segundo plano (detached)
-p 8080:80 Mapeia porta host:container
--name minhaapp Define o nome do container
-v /host:/container Monta um volume
  • docker ps – lista containers em execução.
  • docker ps -a – lista todos os containers (ativos e parados).
  • docker stop <id|nome> – para um container.
  • docker start <id|nome> – inicia um container parado.
  • docker restart <id|nome> – reinicia um container.
  • docker rm <id|nome> – remove um container.

3. Logs, shell e inspeção

  • docker logs <id|nome> – exibe logs do container.
  • docker logs -f <id|nome> – acompanha logs em tempo real (tail -f).
  • docker exec -it <id|nome> sh – abre shell interativo dentro do container.
  • docker inspect <id|nome> – exibe detalhes completos em JSON.
  • docker stats – monitoriza utilização de CPU e memória em tempo real.

4. Volumes e dados

  • docker volume ls – lista volumes.
  • docker volume create <nome> – cria um volume.
  • docker volume rm <nome> – remove um volume.
  • docker system df – exibe utilização de disco (imagens, containers, volumes).

5. Redes

  • docker network ls – lista redes.
  • docker network create <nome> – cria uma rede.
  • docker network inspect <nome> – exibe detalhes da rede.
  • docker network connect <rede> <container> – liga container à rede.
  • docker network disconnect <rede> <container> – desliga container da rede.

6. Limpeza (housekeeping)

  • docker system prune – remove containers parados, redes e imagens não utilizados.
  • docker system prune -a – idem, incluindo todas as imagens não utilizadas.
  • docker volume prune – remove volumes não utilizados.
Atenção: docker system prune -a remove imagens que não estão vinculadas a nenhum container ativo. Utilize com cuidado em ambientes partilhados.

7. Docker Compose (multi-containers)

  • docker compose up -d – inicia os containers definidos no docker-compose.yml.
  • docker compose down – para e remove os containers da stack.
  • docker compose logs -f – acompanha logs de todos os serviços.
  • docker compose ps – lista containers do projeto.
  • docker compose exec <serviço> sh – abre shell dentro de um serviço.

8. Boas práticas em produção

Docker tornou-se padrão para empacotar e executar aplicações. Em produção, porém, imagens mal configuradas e containers a correr como root podem ampliar a superfície de ataque e dificultar auditorias.

Imagens mais leves e em camadas

Utilize imagens base Alpine ou distroless sempre que possível e adote multi-stage builds para compilar numa etapa e copiar apenas o binário para a etapa final. Menos pacotes = menos CVEs e menor tamanho. Fixe a tag da imagem base (ex.: node:20-alpine) para evitar surpresas em rebuilds.

Executar como não-root

Crie um utilizador dedicado no Dockerfile e utilize a instrução USER antes do CMD. No Kubernetes ou Docker Compose, evite o modo privileged e limite recursos de CPU e memória. Monitorize com ferramentas de conformidade como Trivy ou Docker Scout para identificar vulnerabilidades conhecidas.

Secrets e configuração

Nunca coloque palavras-passe ou chaves em variáveis de ambiente em texto no docker-compose.yml. Utilize Docker secrets, ficheiros montados como read-only ou um orquestrador (Kubernetes Secrets, HashiCorp Vault). Efetue a rotação de credenciais regularmente e mantenha as imagens base atualizadas.

Precisa de ajuda?