🐳 Docker

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

31 de agosto de 2025

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

📦 Comandos básicos

Comando

Exemplo

Descrição

docker O comando principal da CLI Docker usado para executar subcomandos e gerir contentores, imagens, redes e volumes
docker version Mostrar 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 .}}'

Mostrar informação completa da versão em formato JSON

docker system info Mostrar informação geral do sistema Docker: número de contentores, imagens, recursos
docker info

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

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

Mostrar informação em formato JSON — útil para automação

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

Mostrar número de CPUs e memória total

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

Mostrar o driver de armazenamento usado pelo Docker

docker image pull Descarregar uma imagem do Docker Hub ou outro registo. Os contentores não podem ser executados sem imagens
docker pull ubuntu

Descarregar a imagem Ubuntu mais recente

docker pull nginx:alpine

Descarregar a imagem leve do Nginx baseada em Alpine Linux

docker pull redis:7

Descarregar a imagem Redis versão 7

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

Executar Ubuntu com um terminal Bash interativo

docker run -d nginx

Executar Nginx em modo destacado (background)

docker run -p 8080:80 nginx

Executar Nginx e associar a porta 80 do contentor à porta 8080 do host

docker container ls Listar contentores em execução
docker ps

Mostrar apenas contentores em execução

docker ps -a

Mostrar todos os contentores, incluindo os parados

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

Mostrar apenas os nomes dos contentores

docker container start Iniciar um ou mais contentores parados
docker start container_name

Iniciar um contentor pelo nome

docker start $(docker ps -aq)

Iniciar todos os contentores

docker start -ai container_name

Iniciar um contentor e ligar terminal interativo

docker container stop Parar um contentor em execução
docker stop container_name

Parar um contentor pelo nome

docker stop $(docker ps -q)

Parar todos os contentores em execução

docker stop -t 5 container_name

Parar um contentor dando-lhe 5 segundos para terminar processos

docker container restart Reiniciar um contentor
docker restart container_name

Reiniciar um contentor específico

docker restart $(docker ps -q)

Reiniciar todos os contentores em execução

docker restart -t 10 container_name

Reiniciar um contentor com atraso de 10 segundos

docker container rm Remover um contentor
docker rm container_name

Remover um contentor parado específico

docker rm $(docker ps -aq)

Remover todos os contentores parados

docker rm -f container_name

Forçar remoção de um contentor em execução

docker image ls Listar imagens descarregadas
docker images

Mostrar todas as imagens no host

docker images -a

Mostrar todas as imagens, incluindo camadas intermédias

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

Mostrar apenas nomes e tags das 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 seu ID

docker rmi $(docker images -q)

Remover todas as imagens (usar com cautela!)

🔁 Gestão de contentores

Comando

Exemplo

Descrição

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

Abrir um shell bash interativo dentro do contentor container

docker exec container ls /app

Executar comando ls no diretório /app dentro do contentor

docker exec -d container touch /tmp/testfile

Executar um comando no contentor em modo destacado (sem esperar)

docker container logs Ver logs do contentor
docker logs container

Mostrar todos os logs do contentor container

docker logs -f container

Seguir logs do contentor em tempo real

docker logs --tail 50 container

Mostrar últimas 50 linhas de logs

docker inspect Obter informação detalhada em JSON sobre um contentor ou imagem
docker inspect container

Mostrar detalhes do contentor container

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

Mostrar o endereço IP do contentor

docker container stats Mostrar estatísticas de uso de recursos em tempo real dos contentores
docker stats

Mostrar CPU, memória, rede e disco de todos os contentores

docker stats container_name

Mostrar estatísticas apenas de um contentor específico

docker stats --no-stream

Mostrar snapshot único de estatísticas e sair

docker container rename Renomear um contentor
docker rename old_name new_name

Renomear contentor de old_name para new_name

docker container cp Copiar ficheiros entre um contentor e o host
docker cp container:/src/file.txt ./file.txt

Copiar ficheiro de um contentor para diretório atual do host

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

Copiar ficheiro do host para o contentor

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

Transmitir ficheiro de log do contentor e filtrar linhas com “ERROR” sem guardar em disco

docker container top Mostrar processos em execução dentro de um contentor
docker top container

Mostrar processos do contentor container

docker container pause Pausar todos os processos num contentor
docker pause container

Pausar o contentor container

docker container unpause Retomar um contentor pausado
docker unpause container

Retomar o contentor container

docker container update Atualizar definições do contentor sem reiniciar
docker update --memory 500m container

Limitar uso de memória do contentor 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 imagem my_image a partir do diretório atual

docker build -t my_image:1.0 .

Construir imagem com tag 1.0

docker build --no-cache -t my_image .

Construir imagem sem usar cache (build limpo)

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

Criar imagem my_img com tag v1 a partir do contentor container

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

Criar imagem com mensagem de commit

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

Criar imagem especificando o autor

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

Adicionar uma tag para enviar ao registo myrepo

docker tag my_image:1.0 my_image:stable

Criar tag stable para imagem com tag 1.0

docker tag my_image my_image:backup

Adicionar tag backup a uma imagem local

docker image push Enviar imagem para Docker Hub ou outro registo
docker push myrepo/my_image:latest

Enviar imagem com tag latest para repositório myrepo

docker push myrepo/my_image:1.0

Enviar imagem com tag 1.0

docker push myrepo/my_image

Enviar imagem com tag padrão latest

docker login Autenticar no Docker Hub ou outro registo
docker login

Introduzir utilizador e palavra-passe interativamente para o Docker Hub

docker login myregistry.local:5000

Login num registo privado

docker login -u username -p password

Login com utilizador e palavra-passe (não recomendado)

docker logout Sair do Docker Hub ou outro registo
docker logout

Logout do Docker Hub

docker logout myregistry.local:5000

Logout de registo privado

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

Adicionar verificação de saúde a cada 30 segundos

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

Verificar estado de healthcheck de um contentor 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

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 rede my_net com definições padrão

docker network create --driver bridge my_bridge_net

Criar rede com driver bridge

docker network create --subnet=192.168.10.0/24 my_custom_net

Criar rede com sub-rede especificada

docker network connect Ligar um contentor a uma rede
docker network connect my_net container

Ligar contentor container à rede my_net

docker network connect --alias db_net my_net container

Ligar com alias db_net

docker network disconnect Desligar um contentor de uma rede
docker network disconnect my_net container

Desligar contentor container da rede my_net

docker volume ls Listar todos os volumes Docker
docker volume ls

Mostrar todos os volumes

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 volume my_vol

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

Criar volume temporário com tmpfs

docker volume inspect Mostrar informação detalhada de um volume
docker volume inspect my_vol

Mostrar detalhes do volume my_vol em JSON

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

Remover volume my_vol

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

Remover todos os volumes não utilizados

🧩 Plugins Docker

Comando

Exemplo

Descrição

docker plugin ls Listar plugins instalados
docker plugin ls

Mostrar todos os plugins e respetivo estado

docker plugin install Instalar um plugin Docker a partir de um registo
docker plugin install vieux/sshfs

Instalar plugin de volume SSHFS

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

Instalar plugin de rede Weave

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

Desativar plugin SSHFS

docker plugin enable Ativar um plugin desativado
docker plugin enable vieux/sshfs

Ativar plugin SSHFS

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

Remover plugin SSHFS

📋 Docker Compose

Comando

Exemplo

Descrição

docker compose up Iniciar contentores definidos em docker-compose.yml
docker compose up

Iniciar todos os serviços em modo interativo

docker compose up -d

Iniciar serviços em modo destacado (background)

docker compose up --build

Construir imagens antes de iniciar serviços

docker compose down Parar e remover contentores, redes e volumes criados por up
docker compose down

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

docker compose down --volumes

Remover também volumes criados pelo Compose

docker compose down --rmi all

Remover também imagens criadas pelo Compose

docker compose logs Ver logs de todos ou 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 comando dentro de um contentor de serviço em execução
docker compose exec web bash

Abrir shell bash interativo no contentor do serviço web

docker compose exec db ls /var/lib/postgresql

Executar ls no contentor da base de dados

docker compose exec -d worker touch /tmp/done

Executar comando no contentor 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 estado de todos os serviços e contentores
docker compose ps -a

Mostrar todos os contentores, incluindo os parados

docker compose ps --services

Mostrar apenas nomes dos serviços

docker compose pull Descarregar/atualizar imagens de serviços do registo
docker compose pull web

Descarregar imagem apenas do serviço web

docker compose pull --ignore-pull-failures

Continuar download mesmo que falhem algumas imagens

docker compose restart Reiniciar todos ou serviços especificados
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 Mostrar configuração final do Compose em 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 contentores
docker compose start web

Iniciar serviço web

docker compose start db api

Iniciar múltiplos serviços de uma vez

docker compose stop Parar serviços sem remover contentores
docker compose stop web

Parar 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 Guardar uma ou mais imagens Docker num arquivo tar para importação ou transferência posterior
docker save -o image.tar my_img:tag

Guardar uma imagem Docker num ficheiro tar

docker save my_image > my_image.tar

Forma alternativa de guardar uma imagem num ficheiro

docker save -o redis_latest.tar redis:latest

Guardar uma imagem Redis específica num ficheiro

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

Carregar imagem Docker de um ficheiro tar

docker load --input redis_latest.tar

Carregar imagem especificando o ficheiro como parâmetro

docker load --quiet < my_image.tar

Carregar imagem sem mostrar progresso

docker container export Exportar sistema de ficheiros de um contentor como arquivo tar sem histórico ou metadados
docker export container > file.tar

Exportar sistema de ficheiros de um contentor para arquivo

docker export my_container > my_container_fs.tar

Exportar contentor pelo nome

docker export -o container_fs.tar container_id

Exportar por ID de contentor usando a flag -o

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

Importar arquivo como nova imagem Docker

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

Importar imagem diretamente de um URL

docker import - my_image < file.tar

Importar de entrada padrão

🧹 Limpeza e Diagnóstico

Comando

Exemplo

Descrição

docker system df Mostrar utilização de disco do Docker: volumes, imagens, contentores e cache de build
docker system df -v

Saída detalhada com informação de cada imagem, contentor e volume

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

Mostrar informação em formato JSON

docker system prune Remover todos os dados Docker não utilizados: contentores parados, redes não utilizadas, imagens órfãs e cache de build
docker system prune -a

Remover imagens não utilizadas, incluindo intermédias

docker system prune --volumes

Remover volumes não utilizados juntamente 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 com mais de 24 horas

docker container prune Remover contentores parados que correspondam a filtros ou todos se nenhum for especificado
docker container prune --filter "until=24h"

Remover contentores parados com mais de 24 horas

docker container prune --force

Remover sem pedido de 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 Implementar um conjunto de serviços no cluster Swarm com base num ficheiro Compose
docker stack deploy -c docker-compose.yml mystack

Implementar stack a partir de ficheiro compose

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

Implementar com encaminhamento de autenticação do registo

docker stack deploy -c swarm-compose.yml mystack

Usar um ficheiro 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

💼 Utilização Avançada do Docker

🚀 Comandos Profissionais do Docker

Comando

Exemplo

Descrição

docker buildx Ferramenta avançada de build de imagens que substitui docker build. Suporta multi-plataforma, 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 multi-plataforma (ARM e x86 simultaneamente)

docker buildx build --load -t localimg .

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

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

Construir e enviar uma imagem multi-plataforma para um registo

docker context Gerir contextos Docker para trabalhar com ambientes remotos ou múltiplos. Permite troca rápida entre Docker Engines locais e remotos
docker context create myremote --docker "host=ssh://user@host"

Criar um contexto para ligação a um host Docker remoto

docker context use myremote

Mudar 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 (ex: arranque de contentor). Útil para monitorização e automação
docker events --filter 'event=start'

Mostrar apenas eventos de arranque de contentores

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

Mostrar eventos da última hora até há 10 minutos

docker events --filter 'type=network'

Mostrar apenas eventos relacionados com rede

docker events --filter 'image=nginx'

Mostrar eventos relacionados com a imagem nginx

docker container update Alterar limites de recursos e definições de um contentor em execução sem reiniciar
docker update --cpus 2 --memory 1g my_container

Definir limite para 2 CPUs e 1 GB RAM

docker update --restart unless-stopped my_container

Definir política de auto-reinício para unless-stopped

docker update --pids-limit 200 my_container

Limitar número de processos a 200

docker container diff Mostrar alterações no sistema de ficheiros de um contentor em comparação com a sua imagem original. Útil para depuração e auditoria
docker diff my_container

Mostrar todas as alterações no sistema de ficheiros do contentor

docker diff my_container | grep '^A'

Mostrar apenas ficheiros adicionados (A — Added)

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

Mostrar histórico de camadas de uma imagem

docker history --no-trunc my_image

Mostrar comandos completos de build sem truncar

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

Mostrar apenas comandos de build e tamanhos de camadas

🛠 Boas Práticas e Automação no Docker

  • Minimizar tamanho da imagem
    Usar imagens base como alpine ou scratch para tamanho mínimo.
    Para achatar camadas, pode usar --squash durante o build (requer funcionalidades experimentais ativas).
    Além disso, remover ficheiros temporários e caches numa única camada:

    RUN apk add --no-cache curl && rm -rf /var/cache/apk/*
  • Minimizar número de camadas
    Combinar comandos num único 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 do Dockerfile
    Usar builds multi-estágio para que apenas ficheiros necessários fiquem na imagem final.
    Copiar e instalar dependências primeiro, depois o código — isto melhora o cache de camadas e acelera rebuilds.

  • Separar segredos e configs
    Nunca guardar ficheiros .env, chaves API ou certificados privados dentro da imagem.
    Usar para configuração:

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

  • Segredos de build (BuildKit)
    Para passagem segura de segredos durante o build, usar 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

    🛡 Isto evita que os segredos sejam armazenados em camadas da imagem.

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

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

    Verificar:

    docker info | grep Rootless

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

  • Analisar imagens para vulnerabilidades
    Usar ferramentas integradas:

    docker scan my_image

    Ou a nova CLI:

    docker scout cves my_image

    Isto ajuda a detetar vulnerabilidades em imagens base e dependências.

  • Monitorizar uso de recursos
    Limitar contentores por memória, CPU e número de processos:

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

    Isto previne sobrecarga de recursos.
    Também é possível limitar I/O:

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

    Útil para contentores que não devem sobrecarregar o subsistema de disco.

  • Limpeza automática
    Remover regularmente imagens, contentores, volumes e redes não utilizados:

    docker system prune -af --volumes

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

    Para limpeza seletiva usar:

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

    - run: docker build -t myapp:${GITHUB_SHA} .
    - run: docker push myapp:${GITHUB_SHA}
  • Registo e monitorização
    Associar drivers de log (--log-driver) a sistemas centralizados: ELK, Loki, Splunk.
    Usar Prometheus + cAdvisor para métricas de contentores.

  • Implementação em produção
    Separar configs de desenvolvimento e produção com docker-compose.override.yml.
    Para alta disponibilidade e escalabilidade usar:

    • Docker Swarm
    • Kubernetes

🐞 Depuração e Perfilagem de Contentores Docker

Comando

Exemplo

Descrição

docker container exec Executa um comando dentro de um contentor em execução, fornecendo acesso interativo ou capacidade de correr processos no ambiente isolado
docker exec -it my_container bash

Iniciar terminal interativo (bash) num contentor em execução

docker exec -it my_container sh

Iniciar shell mínima dentro do contentor (se bash não estiver disponível)

docker exec my_container ls /app

Executar comando dentro do contentor sem modo interativo

docker container logs Mostra logs do contentor especificado, permitindo ver saída e eventos relacionados para diagnóstico e monitorização
docker logs -f --tail 100 my_container

Ver últimas 100 linhas de logs com streaming em tempo real

docker logs my_container

Mostrar todos os logs disponíveis do contentor

docker logs --since 1h my_container

Mostrar logs da última hora

docker inspect Mostra informação detalhada em JSON sobre objeto Docker (contentor, imagem, rede, etc.), incluindo configuração e estado
docker inspect my_container

Obter informação completa em JSON sobre o contentor

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

Obter o PID do processo principal do contentor no host

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

Mostrar endereço IP do contentor

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

Entrar nos namespaces do contentor 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 contentor

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

Ver portas abertas dentro do contentor

tcpdump (inside container) Ferramenta de consola para capturar e analisar tráfego de rede. Usada no contentor para diagnosticar problemas de rede, analisar pacotes e monitorizar ligações
docker exec -it my_container tcpdump -i any

Capturar e analisar tráfego de rede dentro do contentor

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

Guardar tráfego em ficheiro 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 contentores em tempo real
docker stats my_container

Mostrar uso em tempo real de CPU, memória, rede e disco do contentor

docker stats

Mostrar estatísticas de todos os contentores

docker stats --no-stream

Mostrar estatísticas uma vez e sair

docker container top Mostra lista de processos em execução dentro do contentor, semelhante a ps no Linux, para analisar atividade
docker top my_container

Mostrar processos em execução no contentor

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 ficheiros do contentor comparado com a imagem base, indicando ficheiros adicionados, alterados ou apagados
docker diff my_container

Mostrar alterações no sistema de ficheiros do contentor em comparação com a imagem base

docker diff my_container | grep '^A'

Mostrar apenas ficheiros adicionados (A — Added)

docker diff my_container | grep '^C'

Mostrar apenas ficheiros alterados (C — Changed)

docker cp Copia ficheiros e diretórios entre um contentor e o host, permitindo troca de dados e backups
docker cp my_container:/path/to/file ./file

Copiar ficheiro do contentor para o host

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

Copiar ficheiro do host para o contentor

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

Copiar ficheiro de log e filtrar linhas de erro sem guardar em disco

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

💼 Utilização Avançada do Docker Compose

🚀 Comandos Profissionais do Docker Compose

Comando

Exemplo

Descrição

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

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

docker compose up --build

Reconstruir imagens antes de iniciar serviços

docker compose up --remove-orphans

Remover contentores não definidos no ficheiro compose atual

docker compose build Construir imagens para serviços conforme descrito no ficheiro compose com controlo de cache e paralelismo
docker compose build --no-cache

Reconstruir totalmente imagens sem usar cache

docker compose build --parallel

Construir todos os serviços em simultâneo para acelerar o processo

docker compose build web

Construir apenas a imagem do serviço web

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

Descarregar imagens de todos os serviços

docker compose pull db

Descarregar imagem apenas do serviço db

docker compose pull --ignore-pull-failures

Continuar execução ignorando erros durante download de imagens

docker compose restart Reiniciar todos ou serviços especificados sem recriar contentores
docker compose restart

Reiniciar todos os serviços no 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 contentor de serviço em execução com modo interativo opcional
docker compose exec db psql -U user -d database

Executar psql dentro do contentor do serviço db

docker compose exec web sh

Abrir um shell dentro do contentor web

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

Executar pedido curl a partir do contentor do serviço api

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

Mostrar configuração unificada 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 Reiniciar automaticamente serviços quando ficheiros de origem são alterados, útil para desenvolvimento
docker compose watch

Iniciar observação de ficheiros e reiniciar serviços em alterações

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

Receber eventos em formato JSON

docker compose rm Remover contentores de serviços parados
docker compose rm web db

Remover contentores dos serviços web e db

docker compose pause Pausar operação de serviços
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 contentores sem os iniciar
docker compose create web db

Criar contentores para web e db mas não os iniciar

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

Mostrar imagens de todos os serviços

docker compose top Mostrar processos em execução dentro dos contentores de serviços
docker compose top web

Mostrar processos nos contentores do serviço web

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

  • Separação de Ambientes
    Usar ficheiros docker-compose.override.yml separados para diferentes ambientes — development, staging, production. Isto ajuda a isolar configurações e evitar conflitos entre definições.
    Também é possível combinar múltiplos ficheiros de configuração usando a flag -f:

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

    Usar diferentes ficheiros .env (.env.dev, .env.prod, etc.) para gerir variáveis de ambiente.

  • Armazenamento Seguro de Segredos
    Não incluir dados sensíveis (palavras-passe, tokens) diretamente em ficheiros Compose. Em vez disso, usar:

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

  • Ordem de Arranque com depends_on e healthcheck
    Para que serviços aguardem pelas 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, executar:

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

    A opção -d executa contentores em background, e --remove-orphans remove contentores não definidos nas configs atuais.
    Para parar e remover totalmente contentores antigos, se necessário:

    docker compose down --remove-orphans

    Isto garante que novas imagens são carregadas e contentores não utilizados são removidos sem downtime.

  • Hot Reload de Código para Desenvolvimento
    Usar volumes para montar diretórios locais nos contentores. Isto permite aplicar alterações de código instantaneamente sem reconstruir imagens.
    Ter atenção a problemas de permissões e cache de sistema de ficheiros, especialmente em Windows e macOS, para evitar problemas de desempenho.

  • Hot Reload de Código sem Volume (Compose 2.22+)

    develop:
      watch:
        - path: ./src
          action: sync
          target: /app
  • Registo Centralizado de Serviços
    Redirecionar logs de contentores para sistemas de monitorização e agregação de logs como ELK Stack, Loki, Prometheus e Fluentd para fácil análise e alertas.
    Usar drivers de log do Docker (--log-driver) para ativar recolha centralizada de logs.
    Configurar drivers de log para contentores 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
    Configurar política de reinício no docker-compose.yml:

    restart: unless-stopped

    Outras políticas de reinício incluem:

    • no — sem reinício automático (padrão)
    • always — reinicia sempre o contentor
    • on-failure — reinicia apenas em falhas (opcionalmente com número de tentativas)

    Em produção, unless-stopped é a escolha ideal para garantir resiliência.
    Isto permite recuperação automática dos serviços após falhas ou reboots do host.

  • Perfis de Serviço
    Permite executar apenas grupos específicos de serviços:

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

    Para executar apenas o perfil frontend:

    docker compose --profile frontend up

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

Comando

Exemplo

Descrição

docker compose exec Executar um comando dentro de um serviço em execução, com acesso ao contentor ou a processos individuais
docker compose exec web sh

Abrir um shell no contentor do serviço web

docker compose exec db psql -U user -d database

Executar comando psql no contentor do serviço db

docker compose logs Ver logs de serviços para diagnóstico e monitorização
docker compose logs -f db

Ver logs do serviço db em tempo real

docker compose logs --tail=50 api

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

docker compose logs --since=1h web

Mostrar logs da última hora do serviço web

docker inspect Ver informação detalhada sobre o contentor que executa um serviço
docker inspect $(docker compose ps -q web)

Obter JSON com informação detalhada sobre o contentor do serviço web

docker container stats Monitorizar uso de recursos dos contentores que executam serviços
docker stats $(docker compose ps -q worker)

Monitorizar CPU, memória e outros recursos do contentor do serviço worker

docker compose run --rm Executar um contentor temporário com definições de serviço, útil para depuração
docker compose run --rm web sh

Iniciar contentor temporário do serviço web com shell interativo

docker container cp Copiar ficheiros entre host e contentor
docker cp $(docker compose ps -q db):/dump.sql ./dump.sql

Copiar um ficheiro do contentor 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 contentores individuais com redes e volumes necessários sem afetar os serviços principais.

📚 Recursos Adicionais

🚫 Ignorar Ficheiros com .dockerignore

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

node_modules/
*.log
.env

⚡ Simplificação de Comandos com Aliases

Pode criar aliases para comandos usados frequentemente e executá-los mais rapidamente:

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

🧠 Dica: Conselhos de Utilização do Docker

  • Não tente memorizar tudo — use docker --help ou docker <command> --help para explorar comandos.
  • Pratique regularmente e experimente com projetos simples.
  • Acompanhe os tamanhos das imagens e remova ficheiros desnecessários via .dockerignore.

🌐 Links Úteis

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

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

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