Melhores Práticas e Cenários do Mundo Real
Agora que você entende o comando docker-compose down e suas opções, vamos explorar algumas melhores práticas e cenários do mundo real para usar este comando de forma eficaz.
Criando um Ambiente Docker Compose Mais Complexo
Para demonstrar melhor o uso no mundo real, vamos criar um ambiente Docker Compose mais complexo. Vamos configurar um aplicativo web simples com um frontend, backend e banco de dados.
cd ~/project/docker-compose-demo
nano docker-compose.yml
Substitua o conteúdo por:
version: "3"
services:
frontend:
image: nginx:alpine
ports:
- "8080:80"
volumes:
- frontend_data:/usr/share/nginx/html
networks:
- app_network
backend:
image: node:14-alpine
command: sh -c "echo 'Backend service running' && sleep infinity"
volumes:
- backend_data:/app
networks:
- app_network
- db_network
database:
image: postgres:13-alpine
environment:
POSTGRES_PASSWORD: example
POSTGRES_USER: user
POSTGRES_DB: appdb
volumes:
- db_data:/var/lib/postgresql/data
networks:
- db_network
networks:
app_network:
db_network:
volumes:
frontend_data:
backend_data:
db_data:
Salve e saia do editor.
Vamos iniciar este ambiente mais complexo:
docker-compose up -d
Você deve ver a saída mostrando a criação de redes, volumes e contêineres para todos os três serviços.
Melhor Prática: Usando Ambientes
Em cenários do mundo real, você pode ter diferentes ambientes, como desenvolvimento, teste e produção. O Docker Compose permite que você use arquivos de configuração diferentes para diferentes ambientes.
Crie um arquivo para o ambiente de desenvolvimento:
nano docker-compose.dev.yml
Adicione o seguinte conteúdo:
version: "3"
services:
frontend:
ports:
- "8081:80"
environment:
NODE_ENV: development
backend:
environment:
NODE_ENV: development
DEBUG: "true"
database:
ports:
- "5432:5432"
Salve e saia do editor.
Para usar este arquivo em combinação com o arquivo base, você pode usar a flag -f:
docker-compose -f docker-compose.yml -f docker-compose.dev.yml up -d
Isso irá mesclar as configurações, aplicando as configurações específicas do desenvolvimento.
Para derrubar este ambiente, você usaria:
docker-compose -f docker-compose.yml -f docker-compose.dev.yml down
Melhor Prática: Usando um Script de Limpeza
Em pipelines de integração contínua/implantação (CI/CD) ou fluxos de trabalho de desenvolvimento, é frequentemente útil ter um script de limpeza que remova todos os recursos do Docker. Vamos criar um script de limpeza simples:
nano cleanup.sh
Adicione o seguinte conteúdo:
#!/bin/bash
echo "Limpando o ambiente Docker..."
## Parar e remover contêineres, redes, volumes e imagens
docker-compose down --volumes --rmi all --remove-orphans
## Remover volumes pendentes
echo "Removendo volumes pendentes..."
docker volume prune -f
## Remover imagens pendentes
echo "Removendo imagens pendentes..."
docker image prune -f
echo "Limpeza concluída!"
Salve e saia do editor.
Torne o script executável:
chmod +x cleanup.sh
Agora você pode executar este script sempre que precisar fazer uma limpeza completa:
./cleanup.sh
Melhor Prática: Remoção Seletiva de Recursos
Às vezes, você pode querer remover apenas recursos específicos. Por exemplo, você pode querer manter seus volumes (para preservar dados), mas remover contêineres, redes e imagens.
Veja como você abordaria diferentes cenários:
-
Remover apenas contêineres e redes (preservar volumes e imagens):
docker-compose down
-
Remover contêineres, redes e imagens (preservar volumes):
docker-compose down --rmi all
-
Remover contêineres, redes e volumes (preservar imagens):
docker-compose down --volumes
-
Remover apenas imagens locais (não puxadas de um registro):
docker-compose down --rmi local
Ao remover seletivamente os recursos, você pode otimizar seu fluxo de trabalho com base em suas necessidades específicas.
Melhor Prática: Monitorando o Uso de Recursos
Antes e depois de executar docker-compose down, é frequentemente útil monitorar o uso de recursos do Docker. Isso pode ajudá-lo a identificar quaisquer recursos que não estejam sendo limpos corretamente.
Aqui estão alguns comandos úteis:
-
Listar todos os contêineres (incluindo os parados):
docker ps -a
-
Listar todas as redes:
docker network ls
-
Listar todos os volumes:
docker volume ls
-
Listar todas as imagens:
docker image ls
-
Obter informações em todo o sistema:
docker system df
Vamos tentar o último comando para ver nosso uso atual de recursos:
docker system df
Você verá um resumo do uso de recursos do Docker, incluindo o número de contêineres, imagens, volumes e a quantidade total de espaço usado.
Derrubando Nosso Ambiente Complexo
Agora, vamos derrubar nosso ambiente complexo e remover todos os recursos associados:
docker-compose down --volumes --rmi all --remove-orphans
Isso irá parar e remover todos os contêineres, redes, volumes e imagens associados ao nosso projeto Docker Compose.
Ao seguir essas melhores práticas, você pode gerenciar efetivamente seus ambientes Docker e garantir o uso ideal de recursos.