🐳 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 comoalpineouscratchpara 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 umRUNpara 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:$PATHVerifique:
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_imageOu a nova CLI:
docker scout cves my_imageIsso 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 myimageIsso 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 usandodocker-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 (with strace) |
Utilitário Linux para entrar nos namespaces de outro processo (aqui, o contêiner). Usado com strace para rastrear chamadas de sistema dentro do contêiner para depuração |
|
nsenter --target $(docker inspect --format '{{.State.Pid}}' my_container) --mount --uts --ipc --net --pid strace -p 1 |
Entrar nos namespaces do contêiner e rastrear chamadas de sistema do processo 1 |
|
nsenter --target $(docker inspect --format '{{.State.Pid}}' my_container) --mount --uts --ipc --net --pid bash |
Abrir shell bash dentro dos namespaces do contêiner |
|
nsenter --target $(docker inspect --format '{{.State.Pid}}' my_container) --net netstat -tulnp |
Visualizar portas abertas dentro do contêiner |
|
tcpdump (inside container) |
Ferramenta de console para capturar e analisar tráfego de rede. Usada em contêiner para diagnosticar problemas de rede, analisar pacotes e monitorar conexões | |
docker exec -it my_container tcpdump -i any |
Capturar e analisar tráfego de rede dentro do contêiner |
|
docker exec -it my_container tcpdump -nn port 80 |
Capturar tráfego apenas na porta 80 |
|
docker exec -it my_container tcpdump -w /tmp/dump.pcap |
Salvar tráfego em arquivo para análise posterior |
|
docker container stats |
Mostra métricas atuais de uso de recursos (CPU, memória, rede, disco) para um ou vários contêineres em tempo real | |
docker stats my_container |
Exibir em tempo real CPU, memória, rede e disco do contêiner |
|
docker stats |
Mostrar estatísticas de todos os contêineres |
|
docker stats --no-stream |
Exibir estatísticas uma vez e sair |
|
docker container top |
Exibe a lista de processos em execução dentro do contêiner, semelhante ao ps no Linux, para analisar a atividade do contêiner |
|
docker top my_container |
Mostrar processos em execução dentro do contêiner |
|
docker top my_container aux |
Usar formato alternativo como |
|
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 arquivosdocker-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 -dUse 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 secretedocker 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_onehealthcheck
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_healthyMinimizar Downtime Durante Atualizações
Antes de atualizar serviços, execute:docker compose pull && docker compose up -d --remove-orphansA 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-orphansIsso garante que novas imagens sejam carregadas e contêineres não usados sejam removidos sem downtime.
Hot Reload de Código para Desenvolvimento
Usevolumespara 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: /appLog 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 emdocker-compose.yml:restart: unless-stoppedOutras 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/