🐳 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 comoalpineouscratchpara 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 únicoRUNpara 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:$PATHVerificar:
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_imageOu a nova CLI:
docker scout cves my_imageIsto 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 myimageIsto 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 comdocker-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 (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 |
|
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 ficheirosdocker-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 -dUsar 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 secretedocker 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_onehealthcheck
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_healthyMinimizar Downtime Durante Atualizações
Antes de atualizar serviços, executar:docker compose pull && docker compose up -d --remove-orphansA 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-orphansIsto garante que novas imagens são carregadas e contentores não utilizados são removidos sem downtime.
Hot Reload de Código para Desenvolvimento
Usarvolumespara 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: /appRegisto 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 nodocker-compose.yml:restart: unless-stoppedOutras 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/