🐳 Docker

Multilingual DevOps cheat sheet: Linux, Docker, Git, Kubernetes, Helm, Terraform, practical scenarios & templates.
Data de Publicação

31 de agosto de 2025

Docker é uma plataforma para executar aplicações em contêineres isolados. Esta folha de referência contém comandos para trabalhar com imagens, contêineres, redes, volumes, bem como Docker Compose e Swarm.

📦 Comandos básicos

Comando

Exemplo

Descrição

docker O comando principal do Docker CLI usado para executar subcomandos e gerenciar contêineres, imagens, redes e volumes
docker version Exibir a versão instalada do Docker (cliente e servidor). Útil para verificação da instalação
docker version --format '{{.Client.APIVersion}}'

Mostrar apenas a versão da API do cliente Docker

docker version --format '{{.Server.Version}}'

Mostrar apenas a versão do servidor (Engine) do Docker

docker version --format '{{json .}}'

Exibir informações completas da versão em formato JSON

docker system info Exibir informações gerais do sistema Docker: número de contêineres, imagens, recursos
docker info

Mostrar dados do Docker: versões, redes, número de contêineres e imagens

docker info --format '{{json .}}'

Exibir informações em formato JSON — útil para automação

docker info --format '{{.NCPU}} CPUs, {{.MemTotal}} bytes RAM'

Exibir número de CPUs e memória total

docker info --format '{{.Driver}}'

Mostrar o driver de armazenamento usado pelo Docker

docker image pull Baixar uma imagem do Docker Hub ou outro registro. Contêineres não podem ser executados sem imagens
docker pull ubuntu

Baixar a última imagem disponível do Ubuntu

docker pull nginx:alpine

Baixar a imagem leve do Nginx baseada no Alpine Linux

docker pull redis:7

Baixar a imagem Redis versão 7

docker container run Criar e executar um novo contêiner a partir de uma imagem
docker run -it ubuntu bash

Executar Ubuntu com terminal Bash interativo

docker run -d nginx

Executar Nginx em modo destacado (background)

docker run -p 8080:80 nginx

Executar Nginx e vincular a porta 80 do contêiner à porta 8080 do host

docker container ls Listar contêineres em execução
docker ps

Mostrar apenas contêineres em execução

docker ps -a

Mostrar todos os contêineres, incluindo os parados

docker ps --format '{{.Names}}'

Exibir apenas nomes de contêineres

docker container start Iniciar um ou mais contêineres parados
docker start container_name

Iniciar um contêiner pelo nome

docker start $(docker ps -aq)

Iniciar todos os contêineres

docker start -ai container_name

Iniciar um contêiner e anexar terminal interativo

docker container stop Parar um contêiner em execução
docker stop container_name

Parar um contêiner pelo nome

docker stop $(docker ps -q)

Parar todos os contêineres em execução

docker stop -t 5 container_name

Parar um contêiner dando 5 segundos para finalizar processos

docker container restart Reiniciar um contêiner
docker restart container_name

Reiniciar um contêiner específico

docker restart $(docker ps -q)

Reiniciar todos os contêineres em execução

docker restart -t 10 container_name

Reiniciar um contêiner com atraso de 10 segundos

docker container rm Remover um contêiner
docker rm container_name

Remover um contêiner parado específico

docker rm $(docker ps -aq)

Remover todos os contêineres parados

docker rm -f container_name

Forçar remoção de um contêiner em execução

docker image ls Listar imagens baixadas
docker images

Mostrar todas as imagens no host

docker images -a

Mostrar todas as imagens, incluindo camadas intermediárias

docker images --format '{{.Repository}}:{{.Tag}}'

Exibir apenas nomes e tags de imagens

docker image rm Remover uma ou mais imagens do armazenamento local
docker rmi test1:latest

Remover imagem com tag latest do repositório test1

docker rmi 1a2b3c4d5e6f

Remover imagem pelo ID

docker rmi $(docker images -q)

Remover todas as imagens (use com cautela!)

🔁 Gerenciamento de contêineres

Comando

Exemplo

Descrição

docker container exec Executar um comando dentro de um contêiner em execução
docker exec -it container bash

Abrir um shell bash interativo dentro do contêiner chamado container

docker exec container ls /app

Executar o comando ls no diretório /app dentro do contêiner

docker exec -d container touch /tmp/testfile

Executar um comando no contêiner em modo destacado (sem aguardar)

docker container logs Visualizar logs de contêiner
docker logs container

Mostrar todos os logs do contêiner container

docker logs -f container

Seguir logs do contêiner em tempo real

docker logs --tail 50 container

Mostrar as últimas 50 linhas de logs

docker inspect Recuperar informações detalhadas em JSON sobre um contêiner ou imagem
docker inspect container

Exibir detalhes do contêiner container

docker inspect --format '{{.NetworkSettings.IPAddress}}' container

Mostrar o endereço IP do contêiner

docker container stats Exibir estatísticas de uso de recursos em tempo real dos contêineres
docker stats

Exibir CPU, memória, rede e disco de todos os contêineres

docker stats container_name

Mostrar estatísticas apenas de um contêiner específico

docker stats --no-stream

Exibir snapshot único de estatísticas e sair

docker container rename Renomear um contêiner
docker rename old_name new_name

Renomear contêiner de old_name para new_name

docker container cp Copiar arquivos entre um contêiner e o host
docker cp container:/src/file.txt ./file.txt

Copiar um arquivo do contêiner para o diretório atual do host

docker cp ./config.yaml container:/app/config.yaml

Copiar um arquivo do host para o contêiner

docker cp CONTAINER:/var/logs/app.log - | tar x -O | grep "ERROR"

Transmitir um arquivo de log do contêiner e filtrar linhas com “ERROR” sem salvar no disco

docker container top Exibir processos em execução dentro de um contêiner
docker top container

Mostrar processos do contêiner chamado container

docker container pause Pausar todos os processos em um contêiner
docker pause container

Pausar o contêiner container

docker container unpause Retomar um contêiner pausado
docker unpause container

Retomar o contêiner container

docker container update Atualizar configurações de contêiner sem reiniciar
docker update --memory 500m container

Limitar uso de memória do contêiner a 500 MB

🧱 Imagens e Dockerfile

Comando

Exemplo

Descrição

docker buildx build Construir uma imagem Docker a partir de um Dockerfile
docker build -t my_image .

Construir uma imagem marcada como my_image do diretório atual

docker build -t my_image:1.0 .

Construir uma imagem marcada com a versão 1.0

docker build --no-cache -t my_image .

Construir uma imagem sem usar cache para build limpo

docker container commit Criar uma imagem a partir do estado atual de um contêiner
docker commit container my_img:v1

Criar imagem my_img com tag v1 do contêiner container

docker commit -m "Added config" container my_img:v2

Criar uma imagem com mensagem de commit

docker commit -a "John Doe" container my_img:latest

Criar uma imagem especificando o autor

docker image tag Adicionar ou alterar uma tag de imagem
docker tag my_image myrepo/my_image:latest

Adicionar uma tag para enviar ao registro myrepo

docker tag my_image:1.0 my_image:stable

Criar tag stable para imagem marcada como 1.0

docker tag my_image my_image:backup

Adicionar uma tag backup a uma imagem local

docker image push Enviar uma imagem para o Docker Hub ou outro registro
docker push myrepo/my_image:latest

Enviar imagem marcada como latest para o repositório myrepo

docker push myrepo/my_image:1.0

Enviar imagem marcada como 1.0

docker push myrepo/my_image

Enviar imagem com tag padrão latest

docker login Autenticar no Docker Hub ou outro registro
docker login

Inserir usuário e senha interativamente para o Docker Hub

docker login myregistry.local:5000

Login em um registro privado

docker login -u username -p password

Login com usuário e senha (não recomendado)

docker logout Sair do Docker Hub ou outro registro
docker logout

Sair do Docker Hub

docker logout myregistry.local:5000

Sair de um registro privado

HEALTHCHECK Instrução Dockerfile para verificar automaticamente o estado de saúde do contêiner
HEALTHCHECK --interval=30s --timeout=5s --retries=3 CMD curl -f http://localhost/ || exit 1

Adicionar verificação de saúde para checar disponibilidade do serviço a cada 30 segundos

docker inspect --format='{{json .State.Health}}' container_name

Verificar o status do healthcheck de um contêiner em execução

🔌 Redes e Volumes

Comando

Exemplo

Descrição

docker network ls Listar todas as redes Docker
docker network ls

Mostrar todas as redes criadas no Docker

docker network ls --filter driver=bridge

Mostrar apenas redes com driver bridge

docker network ls --format '{{.Name}}'

Mostrar apenas nomes de redes

docker network create Criar uma nova rede Docker
docker network create my_net

Criar uma rede chamada my_net com configurações padrão

docker network create --driver bridge my_bridge_net

Criar uma rede com driver bridge

docker network create --subnet=192.168.10.0/24 my_custom_net

Criar uma rede com sub-rede especificada

docker network connect Conectar um contêiner a uma rede
docker network connect my_net container

Conectar contêiner chamado container à rede my_net

docker network connect --alias db_net my_net container

Conectar com alias db_net

docker network disconnect Desconectar um contêiner de uma rede
docker network disconnect my_net container

Desconectar contêiner container da rede my_net

docker volume ls Listar todos os volumes Docker
docker volume ls

Mostrar todos os volumes Docker

docker volume ls --filter dangling=true

Mostrar volumes não utilizados

docker volume create Criar um novo volume Docker
docker volume create my_vol

Criar um volume chamado my_vol

docker volume create --driver local --opt type=tmpfs my_tmp_vol

Criar um volume temporário usando tmpfs

docker volume inspect Exibir informações detalhadas sobre um volume
docker volume inspect my_vol

Exibir detalhes do volume my_vol em formato JSON

docker volume rm Remover um ou mais volumes
docker volume rm my_vol

Remover volume chamado my_vol

docker volume rm $(docker volume ls -qf dangling=true)

Remover todos os volumes não utilizados

🧩 Plugins do Docker

Comando

Exemplo

Descrição

docker plugin ls Listar plugins instalados no Docker
docker plugin ls

Exibir todos os plugins e seus status

docker plugin install Instalar um plugin Docker de um registro
docker plugin install vieux/sshfs

Instalar o plugin de volume SSHFS

docker plugin install store/weaveworks/net-plugin:latest_release

Instalar o plugin de rede Weave

docker plugin disable Desabilitar um plugin instalado
docker plugin disable vieux/sshfs

Desabilitar o plugin SSHFS

docker plugin enable Habilitar um plugin previamente desabilitado
docker plugin enable vieux/sshfs

Habilitar o plugin SSHFS

docker plugin rm Remover um plugin Docker
docker plugin rm vieux/sshfs

Remover o plugin SSHFS

📋 Docker Compose

Comando

Exemplo

Descrição

docker compose up Iniciar contêineres definidos em docker-compose.yml
docker compose up

Iniciar todos os serviços no diretório atual em modo interativo

docker compose up -d

Iniciar serviços em modo destacado (background)

docker compose up --build

Construir imagens antes de iniciar os serviços

docker compose down Parar e remover contêineres, redes e volumes criados pelo up
docker compose down

Parar todos os serviços em execução e remover recursos associados

docker compose down --volumes

Também remover volumes criados pelo Compose

docker compose down --rmi all

Também remover imagens criadas pelo Compose

docker compose logs Visualizar logs de todos ou de serviços específicos
docker compose logs

Mostrar logs de todos os serviços

docker compose logs -f

Seguir logs em tempo real

docker compose logs web

Mostrar logs apenas do serviço web

docker compose exec Executar um comando dentro de um contêiner de serviço em execução
docker compose exec web bash

Entrar em um shell bash interativo dentro do contêiner do serviço web

docker compose exec db ls /var/lib/postgresql

Executar o comando ls dentro do contêiner do banco de dados

docker compose exec -d worker touch /tmp/done

Executar um comando dentro do contêiner worker em modo destacado

docker compose build Construir ou reconstruir imagens de serviços
docker compose build

Construir todas as imagens definidas em docker-compose.yml

docker compose build web

Construir apenas a imagem do serviço web

docker compose build --no-cache

Construir imagens sem usar cache

docker compose ps Mostrar o status de todos os serviços e contêineres
docker compose ps -a

Mostrar todos os contêineres, incluindo os parados

docker compose ps --services

Mostrar apenas os nomes dos serviços

docker compose pull Baixar/atualizar imagens de serviços do registro
docker compose pull web

Baixar imagem apenas para o serviço web

docker compose pull --ignore-pull-failures

Continuar download mesmo se algumas imagens falharem

docker compose restart Reiniciar todos ou serviços específicos
docker compose restart db

Reiniciar apenas o serviço db

docker compose restart -t 10

Reiniciar serviços com timeout de 10 segundos

docker compose config Exibir a configuração final do Compose em formato YAML
docker compose config --services

Listar todos os serviços na configuração

docker compose config --volumes

Listar todos os volumes definidos na configuração

docker compose start Iniciar serviços parados sem recriar contêineres
docker compose start web

Iniciar o serviço web

docker compose start db api

Iniciar múltiplos serviços de uma vez

docker compose stop Parar serviços sem remover contêineres
docker compose stop web

Parar o serviço web

docker compose stop -t 5

Parar serviços com timeout de 5 segundos

📤 Exportar e Importar

Comando

Exemplo

Descrição

docker image save Salvar uma ou mais imagens Docker em um arquivo tar para importação ou transferência posterior
docker save -o image.tar my_img:tag

Salvar uma imagem Docker em um arquivo tar

docker save my_image > my_image.tar

Forma alternativa de salvar uma imagem em arquivo

docker save -o redis_latest.tar redis:latest

Salvar uma imagem Redis específica em um arquivo

docker image load Carregar imagens Docker de um arquivo tar previamente salvo
docker load < image.tar

Carregar uma imagem Docker de um arquivo tar

docker load --input redis_latest.tar

Carregar uma imagem especificando o arquivo via parâmetro

docker load --quiet < my_image.tar

Carregar uma imagem sem saída de progresso

docker container export Exportar o sistema de arquivos de um contêiner como um arquivo tar sem histórico ou metadados da imagem
docker export container > file.tar

Exportar sistema de arquivos de um contêiner para um arquivo

docker export my_container > my_container_fs.tar

Exportar contêiner pelo nome

docker export -o container_fs.tar container_id

Exportar por ID do contêiner usando a flag -o

docker image import Criar uma nova imagem a partir de um arquivo tar de sistema de arquivos
docker import file.tar new_img

Importar arquivo tar como uma nova imagem Docker

docker import https://example.com/image.tar my_new_image

Importar imagem diretamente de uma URL

docker import - my_image < file.tar

Importar da entrada padrão

🧹 Limpeza e Diagnóstico

Comando

Exemplo

Descrição

docker system df Exibir uso de disco do Docker: volumes, imagens, contêineres e cache de build
docker system df -v

Saída detalhada com informações de cada imagem, contêiner e volume

docker system df --format '{{json .}}'

Exibir informações em formato JSON

docker system prune Remover todos os dados não utilizados do Docker: contêineres parados, redes não usadas, imagens órfãs e cache de build
docker system prune -a

Remover imagens não utilizadas, incluindo intermediárias

docker system prune --volumes

Remover volumes não utilizados junto com outros recursos

docker image prune Remover imagens Docker não utilizadas, incluindo camadas órfãs
docker image prune -a

Remover todas as imagens não utilizadas, incluindo órfãs

docker image prune --filter "until=24h"

Remover imagens mais antigas que 24 horas

docker container prune Remover contêineres parados correspondentes a filtros ou todos se nenhum for especificado
docker container prune --filter "until=24h"

Remover contêineres parados há mais de 24 horas

docker container prune --force

Remover sem confirmação

🐝 Docker Swarm

Comando

Exemplo

Descrição

docker swarm init Inicializar um novo cluster Docker Swarm no nó atual
docker swarm init --advertise-addr 192.168.1.100

Inicializar o cluster especificando o endereço IP

docker swarm init --listen-addr 0.0.0.0:2377

Inicializar com uma porta de escuta especificada

docker service create Criar um novo serviço no cluster Swarm
docker service create --name nginx nginx

Criar um serviço Nginx no Swarm

docker service create --replicas 3 --name web webserver

Criar um serviço com 3 réplicas

docker service create --name redis --publish 6379:6379 redis

Criar um serviço com mapeamento de portas

docker stack deploy Implantar um conjunto de serviços no cluster Swarm baseado em um arquivo Compose
docker stack deploy -c docker-compose.yml mystack

Implantar stack a partir do arquivo compose

docker stack deploy --with-registry-auth -c compose.yml mystack

Implantar com encaminhamento de autenticação de registro

docker stack deploy -c swarm-compose.yml mystack

Usar um arquivo compose alternativo para o stack

docker stack rm Remover uma ou mais stacks do cluster Swarm
docker stack rm mystack

Remover a stack mystack

docker stack rm

Remover todas as stacks (não recomendado)

docker stack rm mystack && docker swarm leave --force

Remover stack e sair do Swarm

💼 Uso Avançado do Docker

🚀 Comandos Profissionais do Docker

Comando

Exemplo

Descrição

docker buildx Ferramenta avançada de build substituindo docker build. Suporta multiplataforma, cache, builds paralelos e exportação para vários formatos. Útil para CI/CD e desenvolvimento multiplataforma
docker buildx build --platform linux/arm64,linux/amd64 -t myimg:multi .

Construir uma imagem multiplataforma (ARM e x86 simultaneamente)

docker buildx build --load -t localimg .

Construir uma imagem e carregá-la no cache local do Docker Engine

docker buildx build --push --platform linux/amd64,linux/arm64 -t repo/app:latest .

Construir e enviar uma imagem multiplataforma para um registro

docker context Gerenciar contextos Docker para trabalhar com ambientes remotos ou múltiplos. Permite alternar rapidamente entre Engines Docker locais e remotos
docker context create myremote --docker "host=ssh://user@host"

Criar um contexto para conectar a um host Docker remoto

docker context use myremote

Alternar para o contexto remoto

docker context ls

Listar contextos disponíveis e o ativo

docker system events Escutar eventos do Docker em tempo real, com filtragem por tipo de evento (ex.: início de contêiner). Útil para monitoramento e automação
docker events --filter 'event=start'

Mostrar apenas eventos de início de contêiner

docker events --since 1h --until 10m

Mostrar eventos da última hora até 10 minutos atrás

docker events --filter 'type=network'

Mostrar apenas eventos relacionados a redes

docker events --filter 'image=nginx'

Mostrar eventos relacionados à imagem nginx

docker container update Alterar limites de recursos e configurações de um contêiner em execução sem reiniciá-lo
docker update --cpus 2 --memory 1g my_container

Definir limite de 2 CPUs e 1 GB de RAM

docker update --restart unless-stopped my_container

Definir política de reinício automático para unless-stopped

docker update --pids-limit 200 my_container

Limitar o número de processos para 200

docker container diff Exibir alterações no sistema de arquivos de um contêiner em comparação com sua imagem original. Útil para depuração e auditoria
docker diff my_container

Exibir todas as alterações no sistema de arquivos do contêiner

docker diff my_container | grep '^A'

Exibir apenas arquivos adicionados (A — Added)

docker image history Exibir o histórico das camadas da imagem: comandos de build, tamanho de cada camada e tempo de criação. Útil para otimização e auditoria
docker history my_image

Exibir histórico de camadas de uma imagem

docker history --no-trunc my_image

Exibir todos os comandos de build sem truncamento

docker history --format "{{.CreatedBy}}: {{.Size}}" my_image

Exibir apenas comandos de build e tamanhos das camadas

🛠 Práticas Úteis de Docker e Automação

  • Minimizar o tamanho da imagem
    Use imagens base como alpine ou scratch para tamanho mínimo.
    Para mesclar camadas, use --squash durante o build (requer recursos experimentais habilitados).
    Além disso, remova arquivos temporários e caches em uma única camada:

    RUN apk add --no-cache curl && rm -rf /var/cache/apk/*
  • Minimizar número de camadas
    Combine comandos em um RUN para reduzir o número de camadas e o tamanho final da imagem:

    RUN apt-get update && apt-get install -y curl && rm -rf /var/lib/apt/lists/*
  • Otimizar build de Dockerfile
    Use builds multi-stage para que apenas os arquivos necessários permaneçam na imagem final.
    Copie e instale dependências primeiro, depois copie o código — isso melhora o cache de camadas e acelera rebuilds.

  • Separar segredos e configs
    Nunca armazene arquivos .env, chaves de API ou certificados privados dentro da imagem.
    Use para configuração:

    • docker secret (no Swarm)
    • variáveis de ambiente (-e VAR=valor ou .env)
    • volumes externos para configs

  • Segredos em tempo de build (BuildKit)
    Para passagem segura de segredos durante o build, use a flag --secret:

    docker buildx build --secret id=mysecret,src=./secret.txt .

    No Dockerfile, o segredo fica disponível em /run/secrets/mysecret:

    RUN --mount=type=secret,id=mysecret cat /run/secrets/mysecret

    🛡 Isso evita que segredos sejam armazenados em camadas da imagem.

  • Docker sem root
    Executar Docker sem privilégios de root melhora a segurança e reduz o risco de comprometimento do host.
    Para habilitar:

    dockerd-rootless-setuptool.sh install
    export PATH=/usr/bin:$PATH

    Verifique:

    docker info | grep Rootless

    ⚠ Alguns recursos (ex.: redirecionamento de portas <1024) não estarão disponíveis.

  • Escanear imagens por vulnerabilidades
    Use ferramentas integradas:

    docker scan my_image

    Ou a nova CLI:

    docker scout cves my_image

    Isso ajuda a detectar vulnerabilidades em imagens base e dependências.

  • Monitorar uso de recursos
    Limite contêineres por memória, CPU e número de processos:

    docker run --memory=512m --cpus="1.5" --pids-limit=200 myimage

    Isso previne consumo excessivo de recursos.
    Você também pode limitar I/O:

    docker run --device-read-bps /dev/sda:1mb --device-write-bps /dev/sda:1mb myimage

    Útil para contêineres que não devem sobrecarregar o subsistema de disco.

  • Limpeza automática
    Remova regularmente imagens, contêineres, volumes e redes não utilizados:

    docker system prune -af --volumes

    ⚠ Cuidado: este comando apaga todos os recursos não utilizados.

    Para limpeza seletiva use:

    docker image prune --filter "until=24h"
  • Integração CI/CD
    Incorpore build, teste e deploy em GitHub Actions, GitLab CI, pipelines Jenkins.
    Exemplo de etapa no GitHub Actions:

    - run: docker build -t myapp:${GITHUB_SHA} .
    - run: docker push myapp:${GITHUB_SHA}
  • Logs e monitoramento
    Conecte drivers de log (--log-driver) a sistemas centralizados: ELK, Loki, Splunk.
    Use Prometheus + cAdvisor para métricas de contêiner.

  • Implantação em produção
    Separe configs para desenvolvimento e produção usando docker-compose.override.yml.
    Para alta disponibilidade e escalabilidade use:

    • Docker Swarm
    • Kubernetes

🐞 Depuração e Profiling de Contêineres Docker

Comando

Exemplo

Descrição

docker container exec Executa um comando dentro de um contêiner em execução, fornecendo acesso interativo ou a capacidade de rodar processos no ambiente isolado do contêiner
docker exec -it my_container bash

Iniciar um terminal interativo (bash) dentro de um contêiner em execução

docker exec -it my_container sh

Iniciar um shell mínimo dentro do contêiner (se bash não estiver disponível)

docker exec my_container ls /app

Executar um comando dentro do contêiner sem modo interativo

docker container logs Exibe logs do contêiner especificado, permitindo visualizar a saída e eventos relacionados à sua operação para diagnóstico e monitoramento
docker logs -f --tail 100 my_container

Visualizar as últimas 100 linhas de logs com streaming em tempo real

docker logs my_container

Mostrar todos os logs disponíveis do contêiner

docker logs --since 1h my_container

Mostrar logs da última hora

docker inspect Exibe informações detalhadas sobre um objeto Docker (contêiner, imagem, rede, etc.) em formato JSON, incluindo configuração e estado
docker inspect my_container

Obter JSON completo com informações do contêiner

docker inspect --format '{{.State.Pid}}' my_container

Obter o PID do processo principal do contêiner no host

docker inspect --format '{{.NetworkSettings.IPAddress}}' my_container

Mostrar o endereço IP do contêiner

nsenter (with strace) Utilitário Linux para entrar nos namespaces de outro processo (aqui, o contêiner). Usado com strace para rastrear chamadas de sistema dentro do contêiner para depuração
nsenter --target $(docker inspect --format '{{.State.Pid}}' my_container) --mount --uts --ipc --net --pid strace -p 1

Entrar nos namespaces do contêiner e rastrear chamadas de sistema do processo 1

nsenter --target $(docker inspect --format '{{.State.Pid}}' my_container) --mount --uts --ipc --net --pid bash

Abrir shell bash dentro dos namespaces do contêiner

nsenter --target $(docker inspect --format '{{.State.Pid}}' my_container) --net netstat -tulnp

Visualizar portas abertas dentro do contêiner

tcpdump (inside container) Ferramenta de console para capturar e analisar tráfego de rede. Usada em contêiner para diagnosticar problemas de rede, analisar pacotes e monitorar conexões
docker exec -it my_container tcpdump -i any

Capturar e analisar tráfego de rede dentro do contêiner

docker exec -it my_container tcpdump -nn port 80

Capturar tráfego apenas na porta 80

docker exec -it my_container tcpdump -w /tmp/dump.pcap

Salvar tráfego em arquivo para análise posterior

docker container stats Mostra métricas atuais de uso de recursos (CPU, memória, rede, disco) para um ou vários contêineres em tempo real
docker stats my_container

Exibir em tempo real CPU, memória, rede e disco do contêiner

docker stats

Mostrar estatísticas de todos os contêineres

docker stats --no-stream

Exibir estatísticas uma vez e sair

docker container top Exibe a lista de processos em execução dentro do contêiner, semelhante ao ps no Linux, para analisar a atividade do contêiner
docker top my_container

Mostrar processos em execução dentro do contêiner

docker top my_container aux

Usar formato alternativo como ps aux

docker top my_container -eo pid,cmd

Mostrar apenas PID e comando dos processos

docker diff Mostra alterações no sistema de arquivos do contêiner em comparação com sua imagem base, indicando arquivos adicionados, modificados ou deletados
docker diff my_container

Mostrar alterações no sistema de arquivos do contêiner em comparação com a imagem base

docker diff my_container | grep '^A'

Mostrar apenas arquivos adicionados (A — Added)

docker diff my_container | grep '^C'

Mostrar apenas arquivos modificados (C — Changed)

docker cp Copia arquivos e diretórios entre um contêiner e o host, permitindo troca de dados e backup
docker cp my_container:/path/to/file ./file

Copiar arquivo do contêiner para o host

docker cp ./config.yaml my_container:/app/config.yaml

Copiar arquivo do host para o contêiner

docker cp my_container:/var/log/app.log - | tar x -O | grep "ERROR"

Copiar arquivo de log e filtrar linhas de erro sem salvar em disco

💡 Para depuração avançada você pode usar nsenter, strace, tcpdump, gdb e outras ferramentas de baixo nível.

💼 Uso Avançado do Docker Compose

🚀 Comandos Profissionais do Docker Compose

Comando

Exemplo

Descrição

docker compose up Inicia e gerencia o ciclo de vida dos serviços especificados no arquivo docker-compose.yml com a opção de rodar em segundo plano
docker compose up -d web db

Rodar apenas os serviços web e db em modo destacado

docker compose up --build

Recompilar imagens antes de iniciar os serviços

docker compose up --remove-orphans

Remover contêineres não definidos no arquivo compose atual

docker compose build Construir imagens para serviços descritos no arquivo compose com controle de cache e paralelismo
docker compose build --no-cache

Reconstruir completamente imagens sem usar cache

docker compose build --parallel

Construir todos os serviços em paralelo para acelerar o processo

docker compose build web

Construir imagem apenas do serviço web

docker compose pull Baixar as versões mais recentes das imagens do registro para todos ou serviços especificados
docker compose pull

Baixar imagens para todos os serviços

docker compose pull db

Baixar imagem apenas para o serviço db

docker compose pull --ignore-pull-failures

Continuar execução ignorando erros durante o pull

docker compose restart Reiniciar todos ou serviços especificados sem recriar contêineres
docker compose restart

Reiniciar todos os serviços do projeto atual

docker compose restart worker

Reiniciar apenas o serviço worker

docker compose restart web db

Reiniciar múltiplos serviços de uma vez

docker compose exec Executar um comando dentro de um contêiner de serviço em execução com modo interativo opcional
docker compose exec db psql -U user -d database

Rodar psql dentro do contêiner do serviço db

docker compose exec web sh

Abrir um shell dentro do contêiner web

docker compose exec api curl http://localhost:8080

Executar requisição curl a partir do contêiner do serviço api

docker compose config Exibir a configuração final do Compose considerando todos os arquivos e variáveis de ambiente
docker compose config

Mostrar configuração mesclada em formato YAML

docker compose config --services

Listar todos os serviços

docker compose config --environment

Mostrar todas as variáveis de ambiente usadas pelos serviços

docker compose watch Reinicia automaticamente serviços em alterações de arquivos fonte, útil para desenvolvimento
docker compose watch

Iniciar observação de arquivos e reiniciar serviços em mudanças

docker compose events Transmitir eventos do Compose: início, parada, atualização de serviços
docker compose events --json

Receber eventos em formato JSON

docker compose rm Remover contêineres de serviços parados
docker compose rm web db

Remover contêineres dos serviços web e db

docker compose pause Pausar operação de serviço
docker compose pause api

Pausar o serviço api

docker compose unpause Retomar serviços pausados
docker compose unpause api

Retomar o serviço api

docker compose create Criar contêineres sem iniciá-los
docker compose create web db

Criar contêineres para web e db mas não iniciá-los

docker compose images Mostrar lista de imagens usadas pelos serviços
docker compose images

Exibir imagens de todos os serviços

docker compose top Mostrar processos em execução dentro dos contêineres de serviço
docker compose top web

Exibir processos dentro dos contêineres do serviço web

🛠 Práticas Úteis e Automação com Docker Compose

  • Separação de Ambientes
    Use arquivos docker-compose.override.yml separados para diferentes ambientes — development, staging, production. Isso ajuda a isolar configurações e evitar conflitos.
    Você também pode combinar múltiplos arquivos de configuração usando a flag -f:

    docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d

    Use diferentes arquivos .env (.env.dev, .env.prod, etc.) para gerenciar variáveis de ambiente.

  • Armazenamento Seguro de Segredos
    Não inclua dados sensíveis (senhas, tokens) diretamente nos arquivos Compose. Em vez disso, use:

    • arquivos .env para variáveis de ambiente (note que .env não são criptografados e não devem ser commitados em repositórios públicos)
    • docker secret e docker config para gerenciamento seguro de segredos e configs no Docker Swarm
    • volumes externos para arquivos de configuração contendo segredos
    • sistemas externos de gestão de segredos (ex.: HashiCorp Vault, AWS Secrets Manager)

  • Ordem de Inicialização com depends_on e healthcheck
    Para fazer serviços aguardarem por dependências estarem prontas:

    services:
      db:
        image: postgres
        healthcheck:
          test: ["CMD-SHELL", "pg_isready -U postgres"]
          interval: 10s
          retries: 5
      api:
        image: my_api
        depends_on:
          db:
            condition: service_healthy
  • Minimizar Downtime Durante Atualizações
    Antes de atualizar serviços, execute:

    docker compose pull && docker compose up -d --remove-orphans

    A opção -d roda contêineres em segundo plano, e --remove-orphans remove contêineres não definidos nas configs atuais.
    Para parar e remover completamente contêineres antigos se necessário:

    docker compose down --remove-orphans

    Isso garante que novas imagens sejam carregadas e contêineres não usados sejam removidos sem downtime.

  • Hot Reload de Código para Desenvolvimento
    Use volumes para montar diretórios locais em contêineres. Isso permite aplicação instantânea de mudanças no código sem reconstruir imagens.
    Fique atento a problemas de permissão e peculiaridades de cache de sistema de arquivos, especialmente em Windows e macOS, para evitar problemas de performance.

  • Hot Reload sem Volume (Compose 2.22+)

    develop:
      watch:
        - path: ./src
          action: sync
          target: /app
  • Log Centralizado de Serviços
    Redirecione logs de contêineres para sistemas de monitoramento e agregação como ELK Stack, Loki, Prometheus e Fluentd.
    Use drivers de log do Docker (--log-driver) para habilitar coleta centralizada de logs.
    Configure drivers de log para contêineres no Compose:

    services:
      api:
        image: my_api
        logging:
          driver: "json-file"
          options:
            max-size: "10m"
            max-file: "3"
  • Reinício Automático de Serviços
    Configure política de reinício em docker-compose.yml:

    restart: unless-stopped

    Outras políticas de reinício incluem:

    • no — sem reinício automático (padrão)
    • always — sempre reiniciar o contêiner
    • on-failure — reiniciar apenas em falhas (opcional com limite de tentativas)

    Em produção, unless-stopped é a melhor escolha para garantir resiliência dos serviços.
    Isso permite recuperação automática de serviços após falhas ou reinicializações do host.

  • Perfis de Serviço
    Permitem rodar apenas grupos específicos de serviços:

    services:
      db:
        image: postgres
        profiles: ["backend"]
      web:
        image: nginx
        profiles: ["frontend"]

    Para rodar apenas o perfil frontend:

    docker compose --profile frontend up

🐞 Depuração e Profiling de Serviços no Docker Compose

Comando

Exemplo

Descrição

docker compose exec Executar um comando dentro de um serviço em execução, fornecendo acesso ao contêiner ou rodando processos individuais
docker compose exec web sh

Abrir um shell dentro do contêiner do serviço web

docker compose exec db psql -U user -d database

Executar o comando psql dentro do contêiner do serviço db

docker compose logs Visualizar logs de serviço para diagnóstico e monitoramento
docker compose logs -f db

Visualizar logs do serviço db em tempo real

docker compose logs --tail=50 api

Mostrar as últimas 50 linhas de logs do serviço api

docker compose logs --since=1h web

Mostrar logs da última hora para o serviço web

docker inspect Visualizar informações detalhadas sobre o contêiner de um serviço
docker inspect $(docker compose ps -q web)

Obter JSON com detalhes do contêiner do serviço web

docker container stats Monitorar uso de recursos de contêineres rodando serviços
docker stats $(docker compose ps -q worker)

Acompanhar CPU, memória e outros recursos do contêiner do serviço worker

docker compose run --rm Rodar um contêiner temporário com configs de serviço, útil para depuração
docker compose run --rm web sh

Iniciar um contêiner one-off para o serviço web com shell interativo

docker container cp Copiar arquivos entre host e contêiner
docker cp $(docker compose ps -q db):/dump.sql ./dump.sql

Copiar um arquivo do contêiner do serviço db para o host

💡 Para depuração conveniente de setups multi-serviço complexos, use docker compose run --rm para lançar contêineres individuais com redes e volumes necessários sem afetar serviços principais.

📚 Recursos Adicionais

🚫 Ignorando Arquivos com .dockerignore

Adicione arquivos e pastas ao .dockerignore que não devem ser incluídos na imagem para reduzir tamanho e acelerar o build:

node_modules/
*.log
.env

⚡ Simplificando Comandos com Aliases

Você pode criar aliases para comandos usados frequentemente e executá-los mais rápido:

alias dcu="docker compose up -d"
alias dcd="docker compose down"
alias dcb="docker compose build"

🧠 Dica: Boas Práticas no Uso do Docker

  • Não tente memorizar tudo — use docker --help ou docker <command> --help para explorar comandos.
  • Pratique regularmente e experimente com projetos simples.
  • Fique atento ao tamanho das imagens e remova arquivos desnecessários via .dockerignore.

🌐 Links Úteis

📘 Documentação Oficial do Docker — guias e referências completas sobre todos os tópicos do Docker:
https://docs.docker.com/

📙 Docker Cheat Sheet — folha de referência oficial completa do Docker:
https://dockerlabs.collabnix.com/docker/cheatsheet/

📗 Docker Hub — imagens e registros:
https://hub.docker.com/