Docker Cheatsheet

27

Os comandos Docker que você vai realmente usar no dia a dia

Português: 2026-03-29

Docker é uma daquelas ferramentas que parecem exagero até você fazer deploy em produção pela primeira vez sem ele — e aí você nunca mais volta atrás. No fundo, Docker simplesmente empacota sua aplicação e seu ambiente em uma unidade portátil chamada container. Mesmo código, mesmas dependências, mesmo comportamento, seja rodando no seu notebook, no seu pipeline de CI ou num servidor em Frankfurt.

O modelo mental é simples: imagens são os blueprints, containers são instâncias em execução desses blueprints. Você constrói uma imagem uma vez e depois cria quantos containers precisar a partir dela. Volumes persistem dados além do ciclo de vida de um container, e networks permitem que containers se comuniquem entre si. Docker Compose une tudo quando você precisa de múltiplos serviços trabalhando em conjunto.

Organizamos tudo pelos recursos com os quais você trabalha — imagens, containers, volumes, networks — e Docker Compose tem sua própria seção porque praticamente já é uma ferramenta à parte. Comece por Imagens e Containers se você está começando. Quando esses conceitos ficarem naturais, volumes e networks vão fazer sentido rapidamente. E se você está rodando qualquer coisa com mais de um serviço, Compose é onde você vai morar.

Uma regra de ouro: não coloque dados que você valoriza dentro de um container sem um volume. Containers são efêmeros por design. Quando eles se vão, tudo dentro deles se vai também. Volumes são sua tábua de salvação.

Imagens
docker build -t <name> .
Construir uma imagem a partir do Dockerfile no diretório atual
docker build -t <name>:<tag> .
Construir e taguear uma imagem com uma versão específica
docker build --no-cache -t <name> .
Construir do zero, ignorando camadas em cache
docker pull <image>
Baixar uma imagem de um registry (Docker Hub por padrão)
docker push <image>
Enviar uma imagem para um registry
docker images
Listar todas as imagens armazenadas localmente
docker images -q
Listar apenas os IDs das imagens (útil para scripts)
docker tag <image> <new:tag>
Criar uma nova tag apontando para uma imagem existente
docker rmi <image>
Remover uma imagem
docker rmi $(docker images -q -f dangling=true)
Remover todas as imagens pendentes (sem tag)
docker image prune
Remover imagens não utilizadas (pendentes)
docker image prune -a
Remover todas as imagens não usadas por nenhum container
docker history <image>
Mostrar o histórico de camadas de uma imagem
docker inspect <image>
Mostrar metadados detalhados sobre uma imagem em JSON
Containers
docker run <image>
Criar e iniciar um container a partir de uma imagem
docker run -d <image>
Rodar um container em segundo plano (modo detached)
docker run -it <image> sh
Rodar interativamente com um shell (ótimo para debug)
docker run -p 8080:80 <image>
Mapear a porta 8080 do host para a porta 80 do container
docker run --name <name> <image>
Rodar um container com um nome amigável
docker run --rm <image>
Remover automaticamente o container quando ele parar
docker run -e KEY=value <image>
Passar uma variável de ambiente para o container
docker run --env-file .env <image>
Carregar variáveis de ambiente a partir de um arquivo
docker ps
Listar containers em execução
docker ps -a
Listar todos os containers, incluindo os parados
docker start <container>
Iniciar um container parado
docker stop <container>
Parar um container em execução de forma graciosa (SIGTERM, depois SIGKILL)
docker kill <container>
Matar imediatamente um container em execução (SIGKILL)
docker restart <container>
Parar e iniciar um container
docker exec -it <container> sh
Abrir um shell dentro de um container em execução
docker exec <container> <cmd>
Executar um comando único dentro de um container em execução
docker logs <container>
Mostrar stdout/stderr de um container
docker logs -f <container>
Acompanhar logs em tempo real (como tail -f)
docker logs --tail 100 <container>
Mostrar as últimas 100 linhas de logs
docker rm <container>
Remover um container parado
docker rm -f <container>
Forçar remoção de um container, mesmo em execução
docker rm $(docker ps -aq)
Remover todos os containers parados
docker cp <container>:/path /local
Copiar arquivos de um container para o seu host
docker inspect <container>
Mostrar metadados detalhados do container em JSON
docker stats
Stream ao vivo de uso de CPU, memória e rede para todos os containers
Volumes
docker volume create <name>
Criar um volume nomeado
docker run -v <vol>:/data <image>
Montar um volume nomeado em /data dentro do container
docker run -v $(pwd):/app <image>
Montar o diretório atual (bind-mount) dentro do container
docker run -v $(pwd):/app:ro <image>
Montar como somente leitura (container não pode escrever)
docker volume ls
Listar todos os volumes
docker volume inspect <name>
Mostrar detalhes sobre um volume (ponto de montagem, driver, etc.)
docker volume rm <name>
Remover um volume
docker volume prune
Remover todos os volumes não usados por nenhum container
Networks
docker network create <name>
Criar uma network bridge definida pelo usuário
docker network create --driver overlay <name>
Criar uma network overlay (para Swarm / multi-host)
docker run --network <name> <image>
Rodar um container conectado a uma network específica
docker network connect <net> <container>
Conectar um container em execução a uma network
docker network disconnect <net> <container>
Desconectar um container de uma network
docker network ls
Listar todas as networks
docker network inspect <name>
Mostrar detalhes da network incluindo containers conectados
docker network rm <name>
Remover uma network
docker network prune
Remover todas as networks não utilizadas
Docker Compose
docker compose up
Criar e iniciar todos os serviços definidos no compose.yaml
docker compose up -d
Iniciar serviços em segundo plano
docker compose up --build
Reconstruir imagens antes de iniciar os serviços
docker compose up <service>
Iniciar apenas um serviço específico (e suas dependências)
docker compose down
Parar e remover containers e networks criados pelo up
docker compose down -v
Mesmo que down, mas também remove volumes nomeados
docker compose down --rmi all
Parar tudo e remover as imagens também
docker compose build
Construir ou reconstruir todas as imagens dos serviços
docker compose build --no-cache
Reconstruir todas as imagens do zero
docker compose logs
Mostrar logs de todos os serviços
docker compose logs -f <service>
Acompanhar logs de um serviço específico
docker compose ps
Listar containers gerenciados pelo Compose
docker compose exec <service> sh
Abrir um shell em um container de serviço em execução
docker compose run <service> <cmd>
Executar um comando único em um novo container para aquele serviço
docker compose pull
Baixar as imagens mais recentes para todos os serviços
docker compose restart <service>
Reiniciar um serviço específico
docker compose config
Validar e exibir a configuração resolvida do Compose
Sistema e Limpeza
docker system df
Mostrar uso de disco por imagens, containers e volumes
docker system prune
Remover containers parados, networks não usadas e imagens pendentes
docker system prune -a --volumes
A opção nuclear — recuperar todo o espaço não utilizado
docker info
Mostrar configuração e estatísticas do Docker em todo o sistema
docker version
Mostrar versões do cliente e servidor Docker

Use docker run --rm para containers descartáveis. Sem isso, containers parados se acumulam silenciosamente. Execute docker ps -a algum dia — você pode se surpreender com quantos zumbis estão à espreita.

Adicione um arquivo .dockerignore ao seu projeto. Funciona como o .gitignore, mas para builds. Excluir node_modules, .git e arquivos de configuração local pode reduzir seu contexto de build de gigabytes para kilobytes e acelerar builds drasticamente.

Ordene as instruções do seu Dockerfile das menos para as mais alteradas frequentemente. Docker cacheia camadas de cima para baixo, então colocar COPY package.json e RUN npm install antes de COPY . . significa que você só reinstala dependências quando elas realmente mudam — não a cada edição de código.

Use docker compose up --build durante o desenvolvimento em vez de fazer build e up separados. Ele reconstrói apenas o que mudou e te poupa daquele clássico quebra-cabeça de "por que minha alteração não está aparecendo".

Execute docker system prune regularmente. Docker é surpreendentemente bom em acumular espaço em disco. Adicione -a --volumes se quiser terra arrasada, mas cuidado — isso remove tudo que não está ativamente em uso, incluindo volumes nomeados com dados.

Prefira docker compose exec em vez de docker exec quando estiver usando Compose. Você pode referenciar serviços pelo nome em vez de caçar IDs de containers. docker compose exec db psql -U postgres ganha de copiar um hash de 12 caracteres toda vez.

Use multi-stage builds para manter imagens de produção enxutas. Construa sua aplicação em um estágio com todas as dependências de desenvolvimento, depois copie apenas o output compilado para uma imagem base mínima. Sua imagem Node de 1.2 GB vira 150 MB.

Related Tools