This project aims to discover the container concepts and tools, and practice these tools by creating a microservices architecture with docker and docker-compose. Additionally, as a cloud and DevOps student, you will gain insight into key containers and docker concepts as follows:
-`Containers`, is a unit of software that packages code and its dependencies so the application runs quickly and reliably across computing environments.
-`Docker`, is a set of "platform as a service" products that use OS-level virtualization to deliver software in packages called containers.
-`Dockerfile`, is a text document that contains all the commands a user could call on the command line to assemble an image.
-`Docker Images`, is a read-only template that contains a set of instructions for creating a container that can run on the Docker platform.
-`Docker Compose`, Compose is a tool for defining and running multi-container Docker applications. With Compose, you use a YAML file to configure your application's services.
### Tips
- Spend time on the theory before rushing into the practice.
You are required to create `Dockerfile`s for each service and call them in your `docker-compose.yml` (Each service should have its container for optimal performance.).
To ensure performance, the containers should be created from the penultimate stable version of either `Alpine` or `Debian`, depending on your preference.
The corresponding service and Docker image must share the same name.
This implies that you must build your project's Docker images and you are not allowed to use pre-built Docker images or services like DockerHub, except for `Alpine` and `Debian`.
-`inventory-app container` is a Node.js server that contains your inventory-app. It will be connected to the inventory database and accessible via port `8080`.
-`billing-app container` is a Node.js server that contains your billing-app. It will be connected to the billing database and consuming the messages from the RabbitMQ queue. It will be accessible via port `8080`.
-`RabbitMQ container` is a RabbitMQ server that contains the queue.
-`api-gateway-app container` is a Node.js server that contains your api-gateway-app. It will forward the requests to the other services and it's accessible via port `3000`.
> You don't have to push your credentials and passwords to your repo, the credentials and passwords must be in the `.env` file, and this file must be ignored in the `.gitignore` file.
You must submit the `README.md` file and all files used to create, delete and manage your infrastructure: docker-compose, Dockerfiles, scripts and so on.