O Docker se tornou o padrão de mercado para empacotar e distribuir aplicações de forma isolada e reproduzível. Seja para rodar um único serviço ou uma stack complexa com balanceamento de carga, entender os comandos fundamentais de gestão de containers, imagens e volumes é essencial para qualquer administrador de infraestrutura moderna. Este guia cobre desde a limpeza básica do ambiente até cenários avançados com múltiplos serviços.
Comandos básicos do Docker
Antes de qualquer operação de manutenção, é importante dominar o ciclo de vida de um container:
# Listar containers em execução
docker ps
# Listar todos os containers (inclusive parados)
docker ps -a
# Rodar um container em background
docker run -d --name meu_app -p 8080:80 nginx
# Ver logs de um container
docker logs -f meu_app
# Executar um comando dentro do container
docker exec -it meu_app bash
Removendo containers, imagens e volumes
Um ambiente Docker em produção acumula containers parados, imagens antigas e volumes órfãos ao longo do tempo, consumindo espaço em disco desnecessariamente. Veja como limpar cada camada:
Removendo containers
# Remover um container específico (deve estar parado)
docker rm meu_app
# Forçar remoção mesmo em execução
docker rm -f meu_app
# Remover todos os containers parados
docker container prune
Removendo imagens
# Remover uma imagem específica
docker rmi nginx:latest
# Remover imagens não utilizadas (dangling)
docker image prune
# Remover TODAS as imagens não usadas por containers
docker image prune -a
Removendo volumes
# Listar volumes
docker volume ls
# Remover um volume específico
docker volume rm meu_volume
# Remover todos os volumes não utilizados
docker volume prune
Faxina completa
Para uma limpeza geral, removendo containers parados, redes não usadas, imagens dangling e cache de build de uma só vez:
docker system prune -a --volumes
Atenção: esse comando é destrutivo e remove tudo que não estiver ativamente em uso por um container rodando. Use com cautela em ambientes de produção.
Docker com múltiplos serviços via Docker Compose
Quando uma aplicação depende de vários serviços interligados — como banco de dados, cache e backend — o Docker Compose permite orquestrar tudo a partir de um único arquivo declarativo:
version: "3.8"
services:
app:
image: minha-app:latest
ports:
- "3000:3000"
depends_on:
- db
- redis
db:
image: mysql:8
environment:
MYSQL_ROOT_PASSWORD: senha_segura
volumes:
- db_data:/var/lib/mysql
redis:
image: redis:alpine
volumes:
db_data:
# Subir toda a stack
docker compose up -d
# Derrubar e remover containers, redes e volumes da stack
docker compose down -v
Monitoramento de containers com Zabbix
Assim como servidores físicos, containers também precisam de observabilidade. O Zabbix pode monitorar hosts Docker através do módulo nativo de monitoramento de containers, coletando métricas de CPU, memória e I/O por container, além de detectar automaticamente novos containers via descoberta de baixo nível (LLD). Uma abordagem comum é rodar o próprio Zabbix Server e Zabbix Agent como containers Docker:
docker run -d --name zabbix-server \
-p 10051:10051 \
-e DB_SERVER_HOST="mysql-server" \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="senha_segura" \
zabbix/zabbix-server-mysql:latest
Balanceamento de carga com Zevenet ZLB
O Zevenet ZLB (atualmente conhecido como SKUDONET) é uma solução de load balancer open source que pode ser executada em containers ou VMs dedicadas, distribuindo tráfego entre múltiplas instâncias de containers Docker. Em arquiteturas onde diversos containers de uma mesma aplicação rodam em paralelo para alta disponibilidade, um balanceador como o Zevenet fica responsável por rotear as requisições, realizar health checks e garantir failover automático caso um container fique indisponível.
Virtualização combinada: ennweb/kvm
Em cenários híbridos, é comum combinar containers Docker com máquinas virtuais completas via KVM, especialmente quando é necessário isolamento mais rígido a nível de kernel ou rodar sistemas operacionais diferentes do host. Imagens como ennweb/kvm permitem rodar KVM aninhado dentro de um container Docker, útil para laboratórios de teste, CI/CD que precisa provisionar VMs efêmeras, ou ambientes de homologação que simulam infraestrutura completa sem provisionar hardware dedicado.
docker run -d --name kvm-nested \
--privileged \
--device /dev/kvm \
-p 8006:8006 \
ennweb/kvm
Boas práticas finais
Independentemente do cenário, algumas práticas evitam dor de cabeça: nunca rodar containers como root desnecessariamente, sempre versionar as tags de imagem (evitar latest em produção), usar volumes nomeados em vez de bind mounts quando possível, e revisar periodicamente docker system df para acompanhar o consumo de disco.
Recursos Adicionais
- Documentação Oficial do Docker
- Docker Hub — repositório de imagens oficiais
- DigitalOcean Community Tutorials
- Kubernetes.io — orquestração além do Compose
- Projeto Moby (Docker Engine) no GitHub