Docker Compose es una herramienta potente que simplifica el proceso de definir y ejecutar aplicaciones Docker multi-contenedor para el desarrollo local. Le permite configurar los servicios, redes y volúmenes de su aplicación en un solo archivo docker-compose.yml, lo que le permite iniciar todo su entorno de desarrollo con un solo comando.
¿Por qué usar Docker Compose para el desarrollo local?
- Configuración Simplificada: Simplifica el proceso de configuración de entornos de desarrollo complejos con múltiples dependencias (por ejemplo, una aplicación web, base de datos y servicio de caché).
- Entornos Reproducibles: Asegura que su entorno local refleje de cerca la producción, reduciendo los problemas de "funciona en mi máquina".
- Gestión de Dependencias: Gestione fácilmente diferentes versiones de servicios (por ejemplo, bases de datos, colas de mensajes) sin conflictos en su máquina host.
- Incorporación: Los nuevos desarrolladores pueden poner en marcha un proyecto rápidamente con un solo comando.
Conceptos Clave
docker-compose.yml(ocompose.yaml): Este archivo YAML es el corazón de Docker Compose. Define los servicios, redes y volúmenes que componen su aplicación.- Servicios (Services): Cada servicio en su
docker-compose.ymlrepresenta un contenedor. Por ejemplo, podría tener un serviciowebpara su aplicación, un serviciodbpara su base de datos y un servicioredispara el almacenamiento en caché. - Redes (Networks): Docker Compose configura una sola red para su aplicación por defecto, lo que permite a los servicios comunicarse entre sí utilizando sus nombres de servicio como nombres de host.
- Volúmenes (Volumes): Se utilizan para el almacenamiento persistente de datos (por ejemplo, datos de bases de datos) y para montar código local en sus contenedores, lo que permite recargas en vivo durante el desarrollo.
Flujo de Trabajo Básico y Comandos
-
Definir Servicios en
docker-compose.yml: Cree un archivodocker-compose.ymlen el directorio raíz de su proyecto.Aquí hay un ejemplo simple para una aplicación web Python Flask conectada a una caché Redis:
```yaml
docker-compose.yml
version: '3.8' # Especifica la versión del formato del archivo Compose services: web: build: . # Construir desde un Dockerfile en el directorio actual ports: - "8000:5000" # Mapear el puerto del host 8000 al puerto del contenedor 5000 volumes: - .:/code # Montar el directorio actual en el directorio /code del contenedor environment: FLASK_ENV: development # Establecer variables de entorno REDIS_HOST: redis # Usar el nombre del servicio 'redis' como nombre de host redis: image: "redis:alpine" # Usar la imagen oficial de Redis ports: - "6379:6379" # Mapear el puerto de Redis volumes: - redis_data:/data # Persistir datos de Redis volumes: redis_data: # Definir el volumen con nombre ```
-
Construir y Ejecutar su Aplicación: Navegue a su directorio de proyecto en la terminal y ejecute:
bash docker compose upEste comando construirá las imágenes (si es necesario) e iniciará todos los servicios definidos en su archivodocker-compose.yml.Para ejecutar servicios en segundo plano (modo detached), use:
bash docker compose up -d -
Detener y Eliminar Servicios: Cuando termine de desarrollar, detenga y elimine todos los contenedores, redes y volúmenes creados por Compose con:
bash docker compose downUsedocker compose down -vpara eliminar también los volúmenes con nombre (esto eliminará los datos persistentes). -
Ver Registros: Para ver los registros de sus servicios en ejecución:
bash docker compose logs [service_name] # Ejemplo: docker compose logs web # Use -f para seguir los registros en tiempo real: # docker compose logs -f web -
Ejecutar Comandos en un Servicio: Puede ejecutar comandos dentro de un contenedor en ejecución usando
exec:bash docker compose exec web bash # Esto abre un shell bash dentro del contenedor del servicio 'web'.
Mejores Prácticas para el Desarrollo Local
- Montaje de Volúmenes para Recargas en Vivo: Monte su directorio de código local en el contenedor (
volumes: - .:/code) para que los cambios de código se reflejen instantáneamente sin necesidad de reconstruir la imagen. - Variables de Entorno: Use archivos
.envpara administrar variables específicas del entorno (como claves API o credenciales de base de datos) y manténgalas fuera de su archivodocker-compose.ymly del control de versiones. - Comprobaciones de Salud: Implemente comprobaciones de salud en su
docker-compose.ymlpara garantizar que los servicios estén listos antes de que los servicios dependientes se inicien. - Imágenes Ligeras: Use imágenes base mínimas (como variantes Alpine) y compilaciones multi-etapa para mantener los tamaños de imagen pequeños.
Siguiendo estos pasos, puede aprovechar eficazmente Docker Compose para crear entornos de desarrollo locales consistentes, aislados y fácilmente administrables para sus aplicaciones multi-contenedor.