🐳 Docker
Docker é uma plataforma para executar aplicações em contêineres isolados. Esta folha de referência contém comandos para trabalhar com imagens, contêineres, redes, volumes, bem como Docker Compose e Swarm.
📦 Comandos básicos
| Comando | Exemplo | Descrição | 
|---|---|---|
| docker | O comando principal do Docker CLI usado para executar subcomandos e gerenciar contêineres, imagens, redes e volumes | |
| docker version | Exibir a versão instalada do Docker (cliente e servidor). Útil para verificação da instalação | |
| docker version --format '{{.Client.APIVersion}}' | Mostrar apenas a versão da API do cliente Docker | |
| docker version --format '{{.Server.Version}}' | Mostrar apenas a versão do servidor (Engine) do Docker | |
| docker version --format '{{json .}}' | Exibir informações completas da versão em formato JSON | |
| docker system info | Exibir informações gerais do sistema Docker: número de contêineres, imagens, recursos | |
| docker info | Mostrar dados do Docker: versões, redes, número de contêineres e imagens | |
| docker info --format '{{json .}}' | Exibir informações em formato JSON — útil para automação | |
| docker info --format '{{.NCPU}} CPUs, {{.MemTotal}} bytes RAM' | Exibir número de CPUs e memória total | |
| docker info --format '{{.Driver}}' | Mostrar o driver de armazenamento usado pelo Docker | |
| docker image pull | Baixar uma imagem do Docker Hub ou outro registro. Contêineres não podem ser executados sem imagens | |
| docker pull ubuntu | Baixar a última imagem disponível do Ubuntu | |
| docker pull nginx:alpine | Baixar a imagem leve do Nginx baseada no Alpine Linux | |
| docker pull redis:7 | Baixar a imagem Redis versão 7 | |
| docker container run | Criar e executar um novo contêiner a partir de uma imagem | |
| docker run -it ubuntu bash | Executar Ubuntu com terminal Bash interativo | |
| docker run -d nginx | Executar Nginx em modo destacado (background) | |
| docker run -p 8080:80 nginx | Executar Nginx e vincular a porta 80 do contêiner à porta 8080 do host | |
| docker container ls | Listar contêineres em execução | |
| docker ps | Mostrar apenas contêineres em execução | |
| docker ps -a | Mostrar todos os contêineres, incluindo os parados | |
| docker ps --format '{{.Names}}' | Exibir apenas nomes de contêineres | |
| docker container start | Iniciar um ou mais contêineres parados | |
| docker start container_name | Iniciar um contêiner pelo nome | |
| docker start $(docker ps -aq) | Iniciar todos os contêineres | |
| docker start -ai container_name | Iniciar um contêiner e anexar terminal interativo | |
| docker container stop | Parar um contêiner em execução | |
| docker stop container_name | Parar um contêiner pelo nome | |
| docker stop $(docker ps -q) | Parar todos os contêineres em execução | |
| docker stop -t 5 container_name | Parar um contêiner dando 5 segundos para finalizar processos | |
| docker container restart | Reiniciar um contêiner | |
| docker restart container_name | Reiniciar um contêiner específico | |
| docker restart $(docker ps -q) | Reiniciar todos os contêineres em execução | |
| docker restart -t 10 container_name | Reiniciar um contêiner com atraso de 10 segundos | |
| docker container rm | Remover um contêiner | |
| docker rm container_name | Remover um contêiner parado específico | |
| docker rm $(docker ps -aq) | Remover todos os contêineres parados | |
| docker rm -f container_name | Forçar remoção de um contêiner em execução | |
| docker image ls | Listar imagens baixadas | |
| docker images | Mostrar todas as imagens no host | |
| docker images -a | Mostrar todas as imagens, incluindo camadas intermediárias | |
| docker images --format '{{.Repository}}:{{.Tag}}' | Exibir apenas nomes e tags de imagens | |
| docker image rm | Remover uma ou mais imagens do armazenamento local | |
| docker rmi test1:latest | Remover imagem com tag  | |
| docker rmi 1a2b3c4d5e6f | Remover imagem pelo ID | |
| docker rmi $(docker images -q) | Remover todas as imagens (use com cautela!) | 
🔁 Gerenciamento de contêineres
| Comando | Exemplo | Descrição | 
|---|---|---|
| docker container exec | Executar um comando dentro de um contêiner em execução | |
| docker exec -it container bash | Abrir um shell bash interativo dentro do contêiner chamado  | |
| docker exec container ls /app | Executar o comando  | |
| docker exec -d container touch /tmp/testfile | Executar um comando no contêiner em modo destacado (sem aguardar) | |
| docker container logs | Visualizar logs de contêiner | |
| docker logs container | Mostrar todos os logs do contêiner  | |
| docker logs -f container | Seguir logs do contêiner em tempo real | |
| docker logs --tail 50 container | Mostrar as últimas 50 linhas de logs | |
| docker inspect | Recuperar informações detalhadas em JSON sobre um contêiner ou imagem | |
| docker inspect container | Exibir detalhes do contêiner  | |
| docker inspect --format '{{.NetworkSettings.IPAddress}}' container | Mostrar o endereço IP do contêiner | |
| docker container stats | Exibir estatísticas de uso de recursos em tempo real dos contêineres | |
| docker stats | Exibir CPU, memória, rede e disco de todos os contêineres | |
| docker stats container_name | Mostrar estatísticas apenas de um contêiner específico | |
| docker stats --no-stream | Exibir snapshot único de estatísticas e sair | |
| docker container rename | Renomear um contêiner | |
| docker rename old_name new_name | Renomear contêiner de  | |
| docker container cp | Copiar arquivos entre um contêiner e o host | |
| docker cp container:/src/file.txt ./file.txt | Copiar um arquivo do contêiner para o diretório atual do host | |
| docker cp ./config.yaml container:/app/config.yaml | Copiar um arquivo do host para o contêiner | |
| docker cp CONTAINER:/var/logs/app.log - | tar x -O | grep "ERROR" | Transmitir um arquivo de log do contêiner e filtrar linhas com “ERROR” sem salvar no disco | |
| docker container top | Exibir processos em execução dentro de um contêiner | |
| docker top container | Mostrar processos do contêiner chamado  | |
| docker container pause | Pausar todos os processos em um contêiner | |
| docker pause container | Pausar o contêiner  | |
| docker container unpause | Retomar um contêiner pausado | |
| docker unpause container | Retomar o contêiner  | |
| docker container update | Atualizar configurações de contêiner sem reiniciar | |
| docker update --memory 500m container | Limitar uso de memória do contêiner a 500 MB | 
🧱 Imagens e Dockerfile
| Comando | Exemplo | Descrição | 
|---|---|---|
| docker buildx build | Construir uma imagem Docker a partir de um Dockerfile | |
| docker build -t my_image . | Construir uma imagem marcada como  | |
| docker build -t my_image:1.0 . | Construir uma imagem marcada com a versão  | |
| docker build --no-cache -t my_image . | Construir uma imagem sem usar cache para build limpo | |
| docker container commit | Criar uma imagem a partir do estado atual de um contêiner | |
| docker commit container my_img:v1 | Criar imagem  | |
| docker commit -m "Added config" container my_img:v2 | Criar uma imagem com mensagem de commit | |
| docker commit -a "John Doe" container my_img:latest | Criar uma imagem especificando o autor | |
| docker image tag | Adicionar ou alterar uma tag de imagem | |
| docker tag my_image myrepo/my_image:latest | Adicionar uma tag para enviar ao registro  | |
| docker tag my_image:1.0 my_image:stable | Criar tag  | |
| docker tag my_image my_image:backup | Adicionar uma tag  | |
| docker image push | Enviar uma imagem para o Docker Hub ou outro registro | |
| docker push myrepo/my_image:latest | Enviar imagem marcada como  | |
| docker push myrepo/my_image:1.0 | Enviar imagem marcada como  | |
| docker push myrepo/my_image | Enviar imagem com tag padrão  | |
| docker login | Autenticar no Docker Hub ou outro registro | |
| docker login | Inserir usuário e senha interativamente para o Docker Hub | |
| docker login myregistry.local:5000 | Login em um registro privado | |
| docker login -u username -p password | Login com usuário e senha (não recomendado) | |
| docker logout | Sair do Docker Hub ou outro registro | |
| docker logout | Sair do Docker Hub | |
| docker logout myregistry.local:5000 | Sair de um registro privado | |
| HEALTHCHECK | Instrução Dockerfile para verificar automaticamente o estado de saúde do contêiner | |
| HEALTHCHECK --interval=30s --timeout=5s --retries=3 CMD curl -f http://localhost/ || exit 1 | Adicionar verificação de saúde para checar disponibilidade do serviço a cada 30 segundos | |
| docker inspect --format='{{json .State.Health}}' container_name | Verificar o status do healthcheck de um contêiner em execução | 
🔌 Redes e Volumes
| Comando | Exemplo | Descrição | 
|---|---|---|
| docker network ls | Listar todas as redes Docker | |
| docker network ls | Mostrar todas as redes criadas no Docker | |
| docker network ls --filter driver=bridge | Mostrar apenas redes com driver  | |
| docker network ls --format '{{.Name}}' | Mostrar apenas nomes de redes | |
| docker network create | Criar uma nova rede Docker | |
| docker network create my_net | Criar uma rede chamada  | |
| docker network create --driver bridge my_bridge_net | Criar uma rede com driver  | |
| docker network create --subnet=192.168.10.0/24 my_custom_net | Criar uma rede com sub-rede especificada | |
| docker network connect | Conectar um contêiner a uma rede | |
| docker network connect my_net container | Conectar contêiner chamado  | |
| docker network connect --alias db_net my_net container | Conectar com alias  | |
| docker network disconnect | Desconectar um contêiner de uma rede | |
| docker network disconnect my_net container | Desconectar contêiner  | |
| docker volume ls | Listar todos os volumes Docker | |
| docker volume ls | Mostrar todos os volumes Docker | |
| docker volume ls --filter dangling=true | Mostrar volumes não utilizados | |
| docker volume create | Criar um novo volume Docker | |
| docker volume create my_vol | Criar um volume chamado  | |
| docker volume create --driver local --opt type=tmpfs my_tmp_vol | Criar um volume temporário usando tmpfs | |
| docker volume inspect | Exibir informações detalhadas sobre um volume | |
| docker volume inspect my_vol | Exibir detalhes do volume  | |
| docker volume rm | Remover um ou mais volumes | |
| docker volume rm my_vol | Remover volume chamado  | |
| docker volume rm $(docker volume ls -qf dangling=true) | Remover todos os volumes não utilizados | 
🧩 Plugins do Docker
| Comando | Exemplo | Descrição | 
|---|---|---|
| docker plugin ls | Listar plugins instalados no Docker | |
| docker plugin ls | Exibir todos os plugins e seus status | |
| docker plugin install | Instalar um plugin Docker de um registro | |
| docker plugin install vieux/sshfs | Instalar o plugin de volume SSHFS | |
| docker plugin install store/weaveworks/net-plugin:latest_release | Instalar o plugin de rede Weave | |
| docker plugin disable | Desabilitar um plugin instalado | |
| docker plugin disable vieux/sshfs | Desabilitar o plugin SSHFS | |
| docker plugin enable | Habilitar um plugin previamente desabilitado | |
| docker plugin enable vieux/sshfs | Habilitar o plugin SSHFS | |
| docker plugin rm | Remover um plugin Docker | |
| docker plugin rm vieux/sshfs | Remover o plugin SSHFS | 
📋 Docker Compose
| Comando | Exemplo | Descrição | 
|---|---|---|
| docker compose up | Iniciar contêineres definidos em docker-compose.yml | |
| docker compose up | Iniciar todos os serviços no diretório atual em modo interativo | |
| docker compose up -d | Iniciar serviços em modo destacado (background) | |
| docker compose up --build | Construir imagens antes de iniciar os serviços | |
| docker compose down | Parar e remover contêineres, redes e volumes criados pelo up | |
| docker compose down | Parar todos os serviços em execução e remover recursos associados | |
| docker compose down --volumes | Também remover volumes criados pelo Compose | |
| docker compose down --rmi all | Também remover imagens criadas pelo Compose | |
| docker compose logs | Visualizar logs de todos ou de serviços específicos | |
| docker compose logs | Mostrar logs de todos os serviços | |
| docker compose logs -f | Seguir logs em tempo real | |
| docker compose logs web | Mostrar logs apenas do serviço  | |
| docker compose exec | Executar um comando dentro de um contêiner de serviço em execução | |
| docker compose exec web bash | Entrar em um shell bash interativo dentro do contêiner do serviço  | |
| docker compose exec db ls /var/lib/postgresql | Executar o comando  | |
| docker compose exec -d worker touch /tmp/done | Executar um comando dentro do contêiner  | |
| 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 o status de todos os serviços e contêineres | |
| docker compose ps -a | Mostrar todos os contêineres, incluindo os parados | |
| docker compose ps --services | Mostrar apenas os nomes dos serviços | |
| docker compose pull | Baixar/atualizar imagens de serviços do registro | |
| docker compose pull web | Baixar imagem apenas para o serviço  | |
| docker compose pull --ignore-pull-failures | Continuar download mesmo se algumas imagens falharem | |
| docker compose restart | Reiniciar todos ou serviços específicos | |
| docker compose restart db | Reiniciar apenas o serviço  | |
| docker compose restart -t 10 | Reiniciar serviços com timeout de 10 segundos | |
| docker compose config | Exibir a configuração final do Compose em formato YAML | |
| docker compose config --services | Listar todos os serviços na configuração | |
| docker compose config --volumes | Listar todos os volumes definidos na configuração | |
| docker compose start | Iniciar serviços parados sem recriar contêineres | |
| docker compose start web | Iniciar o serviço  | |
| docker compose start db api | Iniciar múltiplos serviços de uma vez | |
| docker compose stop | Parar serviços sem remover contêineres | |
| docker compose stop web | Parar o serviço  | |
| docker compose stop -t 5 | Parar serviços com timeout de 5 segundos | 
📤 Exportar e Importar
| Comando | Exemplo | Descrição | 
|---|---|---|
| docker image save | Salvar uma ou mais imagens Docker em um arquivo tar para importação ou transferência posterior | |
| docker save -o image.tar my_img:tag | Salvar uma imagem Docker em um arquivo tar | |
| docker save my_image > my_image.tar | Forma alternativa de salvar uma imagem em arquivo | |
| docker save -o redis_latest.tar redis:latest | Salvar uma imagem Redis específica em um arquivo | |
| docker image load | Carregar imagens Docker de um arquivo tar previamente salvo | |
| docker load < image.tar | Carregar uma imagem Docker de um arquivo tar | |
| docker load --input redis_latest.tar | Carregar uma imagem especificando o arquivo via parâmetro | |
| docker load --quiet < my_image.tar | Carregar uma imagem sem saída de progresso | |
| docker container export | Exportar o sistema de arquivos de um contêiner como um arquivo tar sem histórico ou metadados da imagem | |
| docker export container > file.tar | Exportar sistema de arquivos de um contêiner para um arquivo | |
| docker export my_container > my_container_fs.tar | Exportar contêiner pelo nome | |
| docker export -o container_fs.tar container_id | Exportar por ID do contêiner usando a flag  | |
| docker image import | Criar uma nova imagem a partir de um arquivo tar de sistema de arquivos | |
| docker import file.tar new_img | Importar arquivo tar como uma nova imagem Docker | |
| docker import https://example.com/image.tar my_new_image | Importar imagem diretamente de uma URL | |
| docker import - my_image < file.tar | Importar da entrada padrão | 
🧹 Limpeza e Diagnóstico
| Comando | Exemplo | Descrição | 
|---|---|---|
| docker system df | Exibir uso de disco do Docker: volumes, imagens, contêineres e cache de build | |
| docker system df -v | Saída detalhada com informações de cada imagem, contêiner e volume | |
| docker system df --format '{{json .}}' | Exibir informações em formato JSON | |
| docker system prune | Remover todos os dados não utilizados do Docker: contêineres parados, redes não usadas, imagens órfãs e cache de build | |
| docker system prune -a | Remover imagens não utilizadas, incluindo intermediárias | |
| docker system prune --volumes | Remover volumes não utilizados junto com outros recursos | |
| docker image prune | Remover imagens Docker não utilizadas, incluindo camadas órfãs | |
| docker image prune -a | Remover todas as imagens não utilizadas, incluindo órfãs | |
| docker image prune --filter "until=24h" | Remover imagens mais antigas que 24 horas | |
| docker container prune | Remover contêineres parados correspondentes a filtros ou todos se nenhum for especificado | |
| docker container prune --filter "until=24h" | Remover contêineres parados há mais de 24 horas | |
| docker container prune --force | Remover sem confirmação | 
🐝 Docker Swarm
| Comando | Exemplo | Descrição | 
|---|---|---|
| docker swarm init | Inicializar um novo cluster Docker Swarm no nó atual | |
| docker swarm init --advertise-addr 192.168.1.100 | Inicializar o cluster especificando o endereço IP | |
| docker swarm init --listen-addr 0.0.0.0:2377 | Inicializar com uma porta de escuta especificada | |
| docker service create | Criar um novo serviço no cluster Swarm | |
| docker service create --name nginx nginx | Criar um serviço Nginx no Swarm | |
| docker service create --replicas 3 --name web webserver | Criar um serviço com 3 réplicas | |
| docker service create --name redis --publish 6379:6379 redis | Criar um serviço com mapeamento de portas | |
| docker stack deploy | Implantar um conjunto de serviços no cluster Swarm baseado em um arquivo Compose | |
| docker stack deploy -c docker-compose.yml mystack | Implantar stack a partir do arquivo compose | |
| docker stack deploy --with-registry-auth -c compose.yml mystack | Implantar com encaminhamento de autenticação de registro | |
| docker stack deploy -c swarm-compose.yml mystack | Usar um arquivo compose alternativo para o stack | |
| docker stack rm | Remover uma ou mais stacks do cluster Swarm | |
| docker stack rm mystack | Remover a stack  | |
| docker stack rm | Remover todas as stacks (não recomendado) | |
| docker stack rm mystack && docker swarm leave --force | Remover stack e sair do Swarm | 
💼 Uso Avançado do Docker
🚀 Comandos Profissionais do Docker
| Comando | Exemplo | Descrição | 
|---|---|---|
| docker buildx | Ferramenta avançada de build substituindo docker build. Suporta multiplataforma, cache, builds paralelos e exportação para vários formatos. Útil para CI/CD e desenvolvimento multiplataforma | |
| docker buildx build --platform linux/arm64,linux/amd64 -t myimg:multi . | Construir uma imagem multiplataforma (ARM e x86 simultaneamente) | |
| docker buildx build --load -t localimg . | Construir uma imagem e carregá-la no cache local do Docker Engine | |
| docker buildx build --push --platform linux/amd64,linux/arm64 -t repo/app:latest . | Construir e enviar uma imagem multiplataforma para um registro | |
| docker context | Gerenciar contextos Docker para trabalhar com ambientes remotos ou múltiplos. Permite alternar rapidamente entre Engines Docker locais e remotos | |
| docker context create myremote --docker "host=ssh://user@host" | Criar um contexto para conectar a um host Docker remoto | |
| docker context use myremote | Alternar para o contexto remoto | |
| docker context ls | Listar contextos disponíveis e o ativo | |
| docker system events | Escutar eventos do Docker em tempo real, com filtragem por tipo de evento (ex.: início de contêiner). Útil para monitoramento e automação | |
| docker events --filter 'event=start' | Mostrar apenas eventos de início de contêiner | |
| docker events --since 1h --until 10m | Mostrar eventos da última hora até 10 minutos atrás | |
| docker events --filter 'type=network' | Mostrar apenas eventos relacionados a redes | |
| docker events --filter 'image=nginx' | Mostrar eventos relacionados à imagem  | |
| docker container update | Alterar limites de recursos e configurações de um contêiner em execução sem reiniciá-lo | |
| docker update --cpus 2 --memory 1g my_container | Definir limite de 2 CPUs e 1 GB de RAM | |
| docker update --restart unless-stopped my_container | Definir política de reinício automático para  | |
| docker update --pids-limit 200 my_container | Limitar o número de processos para 200 | |
| docker container diff | Exibir alterações no sistema de arquivos de um contêiner em comparação com sua imagem original. Útil para depuração e auditoria | |
| docker diff my_container | Exibir todas as alterações no sistema de arquivos do contêiner | |
| docker diff my_container | grep '^A' | Exibir apenas arquivos adicionados ( | |
| docker image history | Exibir o histórico das camadas da imagem: comandos de build, tamanho de cada camada e tempo de criação. Útil para otimização e auditoria | |
| docker history my_image | Exibir histórico de camadas de uma imagem | |
| docker history --no-trunc my_image | Exibir todos os comandos de build sem truncamento | |
| docker history --format "{{.CreatedBy}}: {{.Size}}" my_image | Exibir apenas comandos de build e tamanhos das camadas | 
🛠 Práticas Úteis de Docker e Automação
- Minimizar o tamanho da imagem 
 Use imagens base como- alpineou- scratchpara tamanho mínimo.
 Para mesclar camadas, use- --squashdurante o build (requer recursos experimentais habilitados).
 Além disso, remova arquivos temporários e caches em uma única camada:- RUN apk add --no-cache curl && rm -rf /var/cache/apk/*
- Minimizar número de camadas 
 Combine comandos em um- 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 de Dockerfile 
 Use builds multi-stage para que apenas os arquivos necessários permaneçam na imagem final.
 Copie e instale dependências primeiro, depois copie o código — isso melhora o cache de camadas e acelera rebuilds.
- Separar segredos e configs 
 Nunca armazene arquivos- .env, chaves de API ou certificados privados dentro da imagem.
 Use para configuração:- docker secret(no Swarm)
 
- variáveis de ambiente (-e VAR=valorou.env)
 
- volumes externos para configs 
 
- Segredos em tempo de build (BuildKit) 
 Para passagem segura de segredos durante o build, use a flag- --secret:- docker buildx build --secret id=mysecret,src=./secret.txt .- No Dockerfile, o segredo fica disponível em - /run/secrets/mysecret:- RUN --mount=type=secret,id=mysecret cat /run/secrets/mysecret- 🛡 Isso evita que segredos sejam armazenados em camadas da imagem. 
- Docker sem root 
 Executar Docker sem privilégios de root melhora a segurança e reduz o risco de comprometimento do host.
 Para habilitar:- dockerd-rootless-setuptool.sh install export PATH=/usr/bin:$PATH- Verifique: - docker info | grep Rootless- ⚠ Alguns recursos (ex.: redirecionamento de portas <1024) não estarão disponíveis. 
- Escanear imagens por vulnerabilidades 
 Use ferramentas integradas:- docker scan my_image- Ou a nova CLI: - docker scout cves my_image- Isso ajuda a detectar vulnerabilidades em imagens base e dependências. 
- Monitorar uso de recursos 
 Limite contêineres por memória, CPU e número de processos:- docker run --memory=512m --cpus="1.5" --pids-limit=200 myimage- Isso previne consumo excessivo de recursos. 
 Você também pode limitar I/O:- docker run --device-read-bps /dev/sda:1mb --device-write-bps /dev/sda:1mb myimage- Útil para contêineres que não devem sobrecarregar o subsistema de disco. 
- Limpeza automática 
 Remova regularmente imagens, contêineres, volumes e redes não utilizados:- docker system prune -af --volumes- ⚠ Cuidado: este comando apaga todos os recursos não utilizados. - Para limpeza seletiva use: - docker image prune --filter "until=24h"
- Integração CI/CD 
 Incorpore build, teste e deploy em GitHub Actions, GitLab CI, pipelines Jenkins.
 Exemplo de etapa no GitHub Actions:- - run: docker build -t myapp:${GITHUB_SHA} . - run: docker push myapp:${GITHUB_SHA}
- Logs e monitoramento 
 Conecte drivers de log (- --log-driver) a sistemas centralizados: ELK, Loki, Splunk.
 Use Prometheus + cAdvisor para métricas de contêiner.
- Implantação em produção 
 Separe configs para desenvolvimento e produção usando- docker-compose.override.yml.
 Para alta disponibilidade e escalabilidade use:- Docker Swarm
 
- Kubernetes 
 
- Docker Swarm
🐞 Depuração e Profiling de Contêineres Docker
| Comando | Exemplo | Descrição | 
|---|---|---|
| docker container exec | Executa um comando dentro de um contêiner em execução, fornecendo acesso interativo ou a capacidade de rodar processos no ambiente isolado do contêiner | |
| docker exec -it my_container bash | Iniciar um terminal interativo (bash) dentro de um contêiner em execução | |
| docker exec -it my_container sh | Iniciar um shell mínimo dentro do contêiner (se bash não estiver disponível) | |
| docker exec my_container ls /app | Executar um comando dentro do contêiner sem modo interativo | |
| docker container logs | Exibe logs do contêiner especificado, permitindo visualizar a saída e eventos relacionados à sua operação para diagnóstico e monitoramento | |
| docker logs -f --tail 100 my_container | Visualizar as últimas 100 linhas de logs com streaming em tempo real | |
| docker logs my_container | Mostrar todos os logs disponíveis do contêiner | |
| docker logs --since 1h my_container | Mostrar logs da última hora | |
| docker inspect | Exibe informações detalhadas sobre um objeto Docker (contêiner, imagem, rede, etc.) em formato JSON, incluindo configuração e estado | |
| docker inspect my_container | Obter JSON completo com informações do contêiner | |
| docker inspect --format '{{.State.Pid}}' my_container | Obter o PID do processo principal do contêiner no host | |
| docker inspect --format '{{.NetworkSettings.IPAddress}}' my_container | Mostrar o endereço IP do contêiner | |
| nsenter(withstrace) | Utilitário Linux para entrar nos namespaces de outro processo (aqui, o contêiner). Usado com stracepara rastrear chamadas de sistema dentro do contêiner para depuração | |
| nsenter --target $(docker inspect --format '{{.State.Pid}}' my_container) --mount --uts --ipc --net --pid strace -p 1 | Entrar nos namespaces do contêiner e rastrear chamadas de sistema do processo 1 | |
| nsenter --target $(docker inspect --format '{{.State.Pid}}' my_container) --mount --uts --ipc --net --pid bash | Abrir shell bash dentro dos namespaces do contêiner | |
| nsenter --target $(docker inspect --format '{{.State.Pid}}' my_container) --net netstat -tulnp | Visualizar portas abertas dentro do contêiner | |
| tcpdump(inside container) | Ferramenta de console para capturar e analisar tráfego de rede. Usada em contêiner para diagnosticar problemas de rede, analisar pacotes e monitorar conexões | |
| docker exec -it my_container tcpdump -i any | Capturar e analisar tráfego de rede dentro do contêiner | |
| docker exec -it my_container tcpdump -nn port 80 | Capturar tráfego apenas na porta 80 | |
| docker exec -it my_container tcpdump -w /tmp/dump.pcap | Salvar tráfego em arquivo para análise posterior | |
| docker container stats | Mostra métricas atuais de uso de recursos (CPU, memória, rede, disco) para um ou vários contêineres em tempo real | |
| docker stats my_container | Exibir em tempo real CPU, memória, rede e disco do contêiner | |
| docker stats | Mostrar estatísticas de todos os contêineres | |
| docker stats --no-stream | Exibir estatísticas uma vez e sair | |
| docker container top | Exibe a lista de processos em execução dentro do contêiner, semelhante ao psno Linux, para analisar a atividade do contêiner | |
| docker top my_container | Mostrar processos em execução dentro do contêiner | |
| docker top my_container aux | Usar formato alternativo como  | |
| docker top my_container -eo pid,cmd | Mostrar apenas PID e comando dos processos | |
| docker diff | Mostra alterações no sistema de arquivos do contêiner em comparação com sua imagem base, indicando arquivos adicionados, modificados ou deletados | |
| docker diff my_container | Mostrar alterações no sistema de arquivos do contêiner em comparação com a imagem base | |
| docker diff my_container | grep '^A' | Mostrar apenas arquivos adicionados ( | |
| docker diff my_container | grep '^C' | Mostrar apenas arquivos modificados ( | |
| docker cp | Copia arquivos e diretórios entre um contêiner e o host, permitindo troca de dados e backup | |
| — | — | — | 
| docker cp my_container:/path/to/file ./file | Copiar arquivo do contêiner para o host | |
| docker cp ./config.yaml my_container:/app/config.yaml | Copiar arquivo do host para o contêiner | |
| docker cp my_container:/var/log/app.log - | tar x -O | grep "ERROR" | Copiar arquivo de log e filtrar linhas de erro sem salvar em disco | 
💡 Para depuração avançada você pode usar
nsenter,strace,tcpdump,gdbe outras ferramentas de baixo nível.
💼 Uso Avançado do Docker Compose
🚀 Comandos Profissionais do Docker Compose
| Comando | Exemplo | Descrição | 
|---|---|---|
| docker compose up | Inicia e gerencia o ciclo de vida dos serviços especificados no arquivo docker-compose.yml com a opção de rodar em segundo plano | |
| docker compose up -d web db | Rodar apenas os serviços  | |
| docker compose up --build | Recompilar imagens antes de iniciar os serviços | |
| docker compose up --remove-orphans | Remover contêineres não definidos no arquivo compose atual | |
| docker compose build | Construir imagens para serviços descritos no arquivo compose com controle de cache e paralelismo | |
| docker compose build --no-cache | Reconstruir completamente imagens sem usar cache | |
| docker compose build --parallel | Construir todos os serviços em paralelo para acelerar o processo | |
| docker compose build web | Construir imagem apenas do serviço  | |
| docker compose pull | Baixar as versões mais recentes das imagens do registro para todos ou serviços especificados | |
| docker compose pull | Baixar imagens para todos os serviços | |
| docker compose pull db | Baixar imagem apenas para o serviço  | |
| docker compose pull --ignore-pull-failures | Continuar execução ignorando erros durante o pull | |
| docker compose restart | Reiniciar todos ou serviços especificados sem recriar contêineres | |
| docker compose restart | Reiniciar todos os serviços do projeto atual | |
| docker compose restart worker | Reiniciar apenas o serviço  | |
| docker compose restart web db | Reiniciar múltiplos serviços de uma vez | |
| docker compose exec | Executar um comando dentro de um contêiner de serviço em execução com modo interativo opcional | |
| docker compose exec db psql -U user -d database | Rodar psql dentro do contêiner do serviço  | |
| docker compose exec web sh | Abrir um shell dentro do contêiner  | |
| docker compose exec api curl http://localhost:8080 | Executar requisição curl a partir do contêiner do serviço  | |
| docker compose config | Exibir a configuração final do Compose considerando todos os arquivos e variáveis de ambiente | |
| docker compose config | Mostrar configuração mesclada em formato YAML | |
| docker compose config --services | Listar todos os serviços | |
| docker compose config --environment | Mostrar todas as variáveis de ambiente usadas pelos serviços | |
| docker compose watch | Reinicia automaticamente serviços em alterações de arquivos fonte, útil para desenvolvimento | |
| docker compose watch | Iniciar observação de arquivos e reiniciar serviços em mudanças | |
| docker compose events | Transmitir eventos do Compose: início, parada, atualização de serviços | |
| docker compose events --json | Receber eventos em formato JSON | |
| docker compose rm | Remover contêineres de serviços parados | |
| docker compose rm web db | Remover contêineres dos serviços  | |
| docker compose pause | Pausar operação de serviço | |
| 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 contêineres sem iniciá-los | |
| docker compose create web db | Criar contêineres para  | |
| docker compose images | Mostrar lista de imagens usadas pelos serviços | |
| docker compose images | Exibir imagens de todos os serviços | |
| docker compose top | Mostrar processos em execução dentro dos contêineres de serviço | |
| docker compose top web | Exibir processos dentro dos contêineres do serviço  | 
🛠 Práticas Úteis e Automação com Docker Compose
- Separação de Ambientes 
 Use arquivos- docker-compose.override.ymlseparados para diferentes ambientes —- development,- staging,- production. Isso ajuda a isolar configurações e evitar conflitos.
 Você também pode combinar múltiplos arquivos de configuração usando a flag- -f:- docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d- Use diferentes arquivos - .env(- .env.dev,- .env.prod, etc.) para gerenciar variáveis de ambiente.
- Armazenamento Seguro de Segredos 
 Não inclua dados sensíveis (senhas, tokens) diretamente nos arquivos Compose. Em vez disso, use:- arquivos .envpara variáveis de ambiente (note que.envnão são criptografados e não devem ser commitados em repositórios públicos)
 
- docker secrete- docker configpara gerenciamento seguro de segredos e configs no Docker Swarm
 
- volumes externos para arquivos de configuração contendo segredos
 
- sistemas externos de gestão de segredos (ex.: HashiCorp Vault, AWS Secrets Manager) 
 
- arquivos 
- Ordem de Inicialização com - depends_one- healthcheck
 Para fazer serviços aguardarem por dependências estarem prontas:- services: db: image: postgres healthcheck: test: ["CMD-SHELL", "pg_isready -U postgres"] interval: 10s retries: 5 api: image: my_api depends_on: db: condition: service_healthy
- Minimizar Downtime Durante Atualizações 
 Antes de atualizar serviços, execute:- docker compose pull && docker compose up -d --remove-orphans- A opção - -droda contêineres em segundo plano, e- --remove-orphansremove contêineres não definidos nas configs atuais.
 Para parar e remover completamente contêineres antigos se necessário:- docker compose down --remove-orphans- Isso garante que novas imagens sejam carregadas e contêineres não usados sejam removidos sem downtime. 
- Hot Reload de Código para Desenvolvimento 
 Use- volumespara montar diretórios locais em contêineres. Isso permite aplicação instantânea de mudanças no código sem reconstruir imagens.
 Fique atento a problemas de permissão e peculiaridades de cache de sistema de arquivos, especialmente em Windows e macOS, para evitar problemas de performance.
- Hot Reload sem Volume (Compose 2.22+) - develop: watch: - path: ./src action: sync target: /app
- Log Centralizado de Serviços 
 Redirecione logs de contêineres para sistemas de monitoramento e agregação como ELK Stack, Loki, Prometheus e Fluentd.
 Use drivers de log do Docker (- --log-driver) para habilitar coleta centralizada de logs.
 Configure drivers de log para contêineres no Compose:- services: api: image: my_api logging: driver: "json-file" options: max-size: "10m" max-file: "3"
- Reinício Automático de Serviços 
 Configure política de reinício em- docker-compose.yml:- restart: unless-stopped- Outras políticas de reinício incluem: - no— sem reinício automático (padrão)
 
- always— sempre reiniciar o contêiner
 
- on-failure— reiniciar apenas em falhas (opcional com limite de tentativas)
 - Em produção, - unless-stoppedé a melhor escolha para garantir resiliência dos serviços.
 Isso permite recuperação automática de serviços após falhas ou reinicializações do host.
- Perfis de Serviço 
 Permitem rodar apenas grupos específicos de serviços:- services: db: image: postgres profiles: ["backend"] web: image: nginx profiles: ["frontend"]- Para rodar apenas o perfil frontend: - docker compose --profile frontend up
🐞 Depuração e Profiling de Serviços no Docker Compose
| Comando | Exemplo | Descrição | 
|---|---|---|
| docker compose exec | Executar um comando dentro de um serviço em execução, fornecendo acesso ao contêiner ou rodando processos individuais | |
| docker compose exec web sh | Abrir um shell dentro do contêiner do serviço  | |
| docker compose exec db psql -U user -d database | Executar o comando psql dentro do contêiner do serviço  | |
| docker compose logs | Visualizar logs de serviço para diagnóstico e monitoramento | |
| docker compose logs -f db | Visualizar logs do serviço  | |
| docker compose logs --tail=50 api | Mostrar as últimas 50 linhas de logs do serviço  | |
| docker compose logs --since=1h web | Mostrar logs da última hora para o serviço  | |
| docker inspect | Visualizar informações detalhadas sobre o contêiner de um serviço | |
| docker inspect $(docker compose ps -q web) | Obter JSON com detalhes do contêiner do serviço  | |
| docker container stats | Monitorar uso de recursos de contêineres rodando serviços | |
| docker stats $(docker compose ps -q worker) | Acompanhar CPU, memória e outros recursos do contêiner do serviço  | |
| docker compose run --rm | Rodar um contêiner temporário com configs de serviço, útil para depuração | |
| docker compose run --rm web sh | Iniciar um contêiner one-off para o serviço  | |
| docker container cp | Copiar arquivos entre host e contêiner | |
| docker cp $(docker compose ps -q db):/dump.sql ./dump.sql | Copiar um arquivo do contêiner do serviço  | 
💡 Para depuração conveniente de setups multi-serviço complexos, use
docker compose run --rmpara lançar contêineres individuais com redes e volumes necessários sem afetar serviços principais.
📚 Recursos Adicionais
🚫 Ignorando Arquivos com .dockerignore
Adicione arquivos e pastas ao .dockerignore que não devem ser incluídos na imagem para reduzir tamanho e acelerar o build:
node_modules/
*.log
.env⚡ Simplificando Comandos com Aliases
Você pode criar aliases para comandos usados frequentemente e executá-los mais rápido:
alias dcu="docker compose up -d"
alias dcd="docker compose down"
alias dcb="docker compose build"🧠 Dica: Boas Práticas no Uso do Docker
- Não tente memorizar tudo — use docker --helpoudocker <command> --helppara explorar comandos.
 
- Pratique regularmente e experimente com projetos simples.
 
- Fique atento ao tamanho das imagens e remova arquivos desnecessários via - .dockerignore.
🌐 Links Úteis
📘 Documentação Oficial do Docker — guias e referências completas sobre todos os tópicos do Docker:
https://docs.docker.com/
📙 Docker Cheat Sheet — folha de referência oficial completa do Docker:
https://dockerlabs.collabnix.com/docker/cheatsheet/
📗 Docker Hub — imagens e registros:
https://hub.docker.com/