Docker Environment

In order to provide a consistent development environment to everyone, we used Docker to containerize all our application components (as seen in the Deployment Diagram), this gave us good portability, which is also useful for the deployment phase, where we won't have to worry about dependencies or version control, while also improving our scalability.
To orchestrate all our containers, we're using Docker Compose, this allows us to define all necessary deployment parameters like ports, volumes and image version. It also helps launch and stop all containers at once, again helping both in the development and production environments.
Table of contents
Docker Containers
- frontend (running React)
- backend (running Spring Boot)
- mysqldb (relational database)
- mongodb (nosql database for unstructured data)
- nginx (reverse proxy)
Docker Networks
Docker also allows us to create a custom network that connects all our services. This network (evalmed-network) allows services to reference each other by their service names and creates a dedicated bridge network, giving us isolation.
Docker Volumes
Volumes are persistent data stores for containers. When created their stored within a directory on the Docker host. Our volumes consist of:
- db - used by mysql
- mongodb_data - used by mongodb to store mec data