Mejores Prácticas y Escenarios del Mundo Real
Ahora que comprende el comando docker-compose down y sus opciones, exploremos algunas mejores prácticas y escenarios del mundo real para usar este comando de manera efectiva.
Creación de un Entorno Docker Compose Más Complejo
Para demostrar mejor el uso en el mundo real, creemos un entorno Docker Compose más complejo. Configuraremos una aplicación web simple con un frontend, backend y base de datos.
cd ~/project/docker-compose-demo
nano docker-compose.yml
Reemplace el contenido con:
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:
Guarde y salga del editor.
Iniciemos este entorno más complejo:
docker-compose up -d
Debería ver una salida que muestra la creación de redes, volúmenes y contenedores para los tres servicios.
Mejor Práctica: Uso de Entornos
En escenarios del mundo real, es posible que tenga diferentes entornos como desarrollo, pruebas y producción. Docker Compose le permite usar diferentes archivos de configuración para diferentes entornos.
Cree un archivo para el entorno de desarrollo:
nano docker-compose.dev.yml
Agregue el siguiente contenido:
version: "3"
services:
frontend:
ports:
- "8081:80"
environment:
NODE_ENV: development
backend:
environment:
NODE_ENV: development
DEBUG: "true"
database:
ports:
- "5432:5432"
Guarde y salga del editor.
Para usar este archivo en combinación con el archivo base, puede usar la bandera -f:
docker-compose -f docker-compose.yml -f docker-compose.dev.yml up -d
Esto fusionará las configuraciones, aplicando la configuración específica del desarrollo.
Para desactivar este entorno, usaría:
docker-compose -f docker-compose.yml -f docker-compose.dev.yml down
Mejor Práctica: Uso de un Script de Limpieza
En las tuberías de integración/implementación continua (CI/CD) o en los flujos de trabajo de desarrollo, a menudo es útil tener un script de limpieza que elimine todos los recursos de Docker. Creemos un script de limpieza simple:
nano cleanup.sh
Agregue el siguiente contenido:
#!/bin/bash
echo "Cleaning up Docker environment..."
## Stop and remove containers, networks, volumes, and images
docker-compose down --volumes --rmi all --remove-orphans
## Remove dangling volumes
echo "Removing dangling volumes..."
docker volume prune -f
## Remove dangling images
echo "Removing dangling images..."
docker image prune -f
echo "Cleanup complete!"
Guarde y salga del editor.
Haga que el script sea ejecutable:
chmod +x cleanup.sh
Ahora puede ejecutar este script cada vez que necesite hacer una limpieza completa:
./cleanup.sh
Mejor Práctica: Eliminación Selectiva de Recursos
A veces, es posible que desee eliminar solo recursos específicos. Por ejemplo, es posible que desee conservar sus volúmenes (para preservar los datos) pero eliminar contenedores, redes e imágenes.
Así es como abordaría diferentes escenarios:
-
Eliminar solo contenedores y redes (conservar volúmenes e imágenes):
docker-compose down
-
Eliminar contenedores, redes e imágenes (conservar volúmenes):
docker-compose down --rmi all
-
Eliminar contenedores, redes y volúmenes (conservar imágenes):
docker-compose down --volumes
-
Eliminar solo imágenes locales (no extraídas de un registro):
docker-compose down --rmi local
Al eliminar selectivamente los recursos, puede optimizar su flujo de trabajo en función de sus necesidades específicas.
Mejor Práctica: Monitoreo del Uso de Recursos
Antes y después de ejecutar docker-compose down, a menudo es útil monitorear el uso de sus recursos de Docker. Esto puede ayudarlo a identificar cualquier recurso que no se esté limpiando correctamente.
Aquí hay algunos comandos útiles:
-
Enumerar todos los contenedores (incluidos los detenidos):
docker ps -a
-
Enumerar todas las redes:
docker network ls
-
Enumerar todos los volúmenes:
docker volume ls
-
Enumerar todas las imágenes:
docker image ls
-
Obtener información de todo el sistema:
docker system df
Intentemos el último comando para ver nuestro uso actual de recursos:
docker system df
Verá un resumen del uso de sus recursos de Docker, incluido el número de contenedores, imágenes, volúmenes y la cantidad total de espacio utilizado.
Desactivación de Nuestro Entorno Complejo
Ahora, desactivemos nuestro entorno complejo y eliminemos todos los recursos asociados:
docker-compose down --volumes --rmi all --remove-orphans
Esto detendrá y eliminará todos los contenedores, redes, volúmenes e imágenes asociados con nuestro proyecto Docker Compose.
Al seguir estas mejores prácticas, puede administrar eficazmente sus entornos Docker y garantizar un uso óptimo de los recursos.