🐳 Docker
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  | |
| 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  | |
| docker exec container ls /app | Executar comando  | |
| 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  | |
| 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  | |
| 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  | |
| 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  | |
| docker container pause | Pausar todos os processos num contentor | |
| docker pause container | Pausar o contentor  | |
| docker container unpause | Retomar um contentor pausado | |
| docker unpause container | Retomar o contentor  | |
| 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  | |
| docker build -t my_image:1.0 . | Construir imagem com tag  | |
| 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  | |
| 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  | |
| docker tag my_image:1.0 my_image:stable | Criar tag  | |
| docker tag my_image my_image:backup | Adicionar tag  | |
| docker image push | Enviar imagem para Docker Hub ou outro registo | |
| docker push myrepo/my_image:latest | Enviar imagem com tag  | |
| docker push myrepo/my_image:1.0 | Enviar imagem com tag  | |
| docker push myrepo/my_image | Enviar imagem com tag padrão  | |
| 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  | |
| 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  | |
| docker network create --driver bridge my_bridge_net | Criar rede com driver  | |
| 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  | |
| docker network connect --alias db_net my_net container | Ligar com alias  | |
| docker network disconnect | Desligar um contentor de uma rede | |
| docker network disconnect my_net container | Desligar contentor  | |
| 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  | |
| 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  | |
| docker volume rm | Remover um ou mais volumes | |
| docker volume rm my_vol | Remover volume  | |
| 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  | |
| 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  | |
| docker compose exec db ls /var/lib/postgresql | Executar  | |
| docker compose exec -d worker touch /tmp/done | Executar comando no contentor  | |
| docker compose build | Construir ou reconstruir imagens de serviços | |
| docker compose build | Construir todas as imagens definidas em  | |
| docker compose build web | Construir apenas a imagem do serviço  | |
| 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  | |
| 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  | |
| 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  | |
| 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  | |
| 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  | |
| 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  | |
| 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  | |
| 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  | |
| 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 ( | |
| 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- alpineou- scratchpara tamanho mínimo.
 Para achatar camadas, pode usar- --squashdurante 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- RUNpara 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=valueou.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 
 
- Docker Swarm
🐞 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(withstrace) | Utilitário Linux para entrar nos namespaces de outro processo (aqui, o contentor). Usado com stracepara 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 psno Linux, para analisar atividade | |
| docker top my_container | Mostrar processos em execução no contentor | |
| docker top my_container aux | Usar formato alternativo como  | |
| 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 ( | |
| docker diff my_container | grep '^C' | Mostrar apenas ficheiros alterados ( | |
| 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,gdbe 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  | |
| 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  | |
| 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  | |
| 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  | |
| 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  | |
| docker compose exec web sh | Abrir um shell dentro do contentor  | |
| docker compose exec api curl http://localhost:8080 | Executar pedido curl a partir do contentor do serviço  | |
| 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  | |
| docker compose pause | Pausar operação de serviços | |
| docker compose pause api | Pausar o serviço  | |
| docker compose unpause | Retomar serviços pausados | |
| docker compose unpause api | Retomar o serviço  | |
| docker compose create | Criar contentores sem os iniciar | |
| docker compose create web db | Criar contentores para  | |
| 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  | 
🛠 Boas Práticas e Automação com Docker Compose
- Separação de Ambientes 
 Usar ficheiros- docker-compose.override.ymlseparados 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 .envpara variáveis de ambiente (nota:.envnão são encriptados e não devem ser commitados em repositórios públicos)
 
- docker secrete- docker configpara 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) 
 
- ficheiros 
- Ordem de Arranque com - depends_one- 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 - -dexecuta contentores em background, e- --remove-orphansremove 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- volumespara 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  | |
| docker compose exec db psql -U user -d database | Executar comando psql no contentor do serviço  | |
| docker compose logs | Ver logs de serviços para diagnóstico e monitorização | |
| docker compose logs -f db | Ver logs do serviço  | |
| docker compose logs --tail=50 api | Mostrar últimas 50 linhas de logs do serviço  | |
| docker compose logs --since=1h web | Mostrar logs da última hora do serviço  | |
| 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  | |
| 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  | |
| 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  | |
| 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  | 
💡 Para depuração conveniente de setups multi-serviço complexos, use
docker compose run --rmpara 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 --helpoudocker <command> --helppara 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/