Saltearse al contenido

Entorno de Docker para DatAscend

Desarrollo de aplicaciones con Docker Compose

Sección titulada «Desarrollo de aplicaciones con Docker Compose»

El archivo Docker Compose está diseñado para proporcionar un entorno de desarrollo completo para la aplicación. Incluye una base de datos PostgreSQL, un servicio para poblar la base de datos y el contenedor principal de la aplicación.

El archivo compose define tres servicios principales:

  • Servicio de base de datos

    • Imagen: postgres:latest - Usa la última imagen de PostgreSQL de Docker Hub.
    • Nombre del Contenedor: da-database - Un nombre descriptivo para el contenedor de la base de datos.
    • Healthcheck: Implementa una verificación de salud para asegurar que la base de datos esté completamente operativa antes de que comiencen los servicios dependientes.
    • Entorno:
      • CONTAINER=TEST: Configura una bandera de entorno de prueba, potencialmente usada por scripts dentro del contenedor.
      • POSTGRES_PASSWORD=postgres: Establece la contraseña de PostgreSQL a postgres. Importante: Esto es solo para propósitos de desarrollo/prueba y no debe usarse en producción.
    • Puertos: Mapea el puerto 54320 en el host al puerto 5432 dentro del contenedor. Esto permite acceder a la base de datos usando localhost:54320 desde la máquina host.
  • Servicio de poblamiento de base de datos

    • Imagen: postgres:latest - Usa la última imagen de PostgreSQL para ejecutar el script de poblamiento de la base de datos.
    • Nombre del Contenedor: da-seed-database - Nombra claramente el contenedor responsable de poblar la base de datos.
    • Comando: ["/data/scripts/seed_db.sh", "/data/database"] - Ejecuta el script seed_db.sh ubicado en el directorio del proyecto montado. El segundo argumento /data/database es un parámetro pasado al script, que potencialmente contiene datos o configuraciones necesarias para poblar.
    • Depende de: database - Asegura que el servicio database esté saludable antes de que comience database_script, garantizando la disponibilidad de la base de datos.
    • Volúmenes: Monta el directorio del proyecto actual (..) en el host dentro del directorio /data dentro del contenedor, haciendo que los scripts y datos del proyecto sean accesibles.
    • Entorno: Configura las variables de entorno necesarias para el acceso a la base de datos, incluidos los detalles de conexión que apuntan al servicio database usando su nombre de servicio. Esto asegura que el script de poblamiento pueda conectarse correctamente a la base de datos.
  • Servicio de aplicación

    • Imagen: node:16.16.0 - Usa Node.js 16.16.0 para ejecutar la aplicación.
    • Nombre del Contenedor: da-application - Nombra claramente el contenedor que ejecuta la aplicación principal.
    • Directorio de Trabajo: /data - Establece el directorio de trabajo del contenedor en /data, que es donde está montado el código.
    • Comando: /bin/bash -c "chmod +x /data/scripts/entrypoint.sh && /data/scripts/entrypoint.sh" - Ejecuta el script entrypoint.sh después de establecer permisos de ejecución. Este script probablemente iniciará el proceso principal de la aplicación.
    • Depende de:
      • database: Asegura que la base de datos esté saludable antes de iniciar la aplicación.
      • database_script: Asegura que el proceso de poblamiento de la base de datos se haya completado con éxito antes de iniciar la aplicación, previniendo problemas de inicio de aplicación relacionados con la falta de datos iniciales.
    • Volúmenes:
      • backend_modules:/data/backend/node_modules: Define un volumen nombrado para los módulos node del backend.
      • project:/data: Vincula el directorio del host a /data dentro del contenedor. Esto asegura que los cambios de código en el host se reflejen directamente dentro del contenedor.
    • Puertos: Mapea el puerto 4000 en el host al puerto 4000 dentro del contenedor. Esto permite acceder a la aplicación a través de localhost:4000 desde la máquina host.
    • Entorno: Configura variables de entorno para la aplicación, incluidos los detalles de conexión a la base de datos y la configuración de la aplicación. Este entorno hace que el contenedor sea consciente de su modo de prueba y los parámetros de conexión a la base de datos.

Los siguientes volúmenes nombrados están definidos para caché de datos y sincronización de código:

  • backend_modules: Un volumen nombrado usado para persistir el directorio /backend/node_modules entre reinicios de contenedores.
  • project: Un montaje que vincula directamente el directorio actual del proyecto en el host al directorio /data dentro de los contenedores. Esto asegura que los cambios de código estén inmediatamente disponibles dentro de los contenedores sin reconstruir la imagen.

Para iniciar la aplicación, navega al directorio que contiene este archivo docker-compose.yml y ejecuta:

Ventana de terminal
docker-compose -f ./Dockerfiles/docker-compose.yml up -d

Nota: Cualquier variable de entorno requerida por la aplicación podría configurarse añadiéndolas a este comando, lo que permite probar fácilmente diferentes configuraciones de bases de datos, entornos, etc.