https://github.com/mahshid1378/voting-app
Example distributed app composed of multiple containers for Docker, Compose, Swarm, and Kubernetes
https://github.com/mahshid1378/voting-app
docker docker-compose docker-container docker-image docker-swarm dockerfile kubernetes
Last synced: 3 months ago
JSON representation
Example distributed app composed of multiple containers for Docker, Compose, Swarm, and Kubernetes
- Host: GitHub
- URL: https://github.com/mahshid1378/voting-app
- Owner: mahshid1378
- License: apache-2.0
- Created: 2025-02-18T07:21:52.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2025-02-18T08:11:19.000Z (over 1 year ago)
- Last Synced: 2025-08-08T02:42:35.571Z (11 months ago)
- Topics: docker, docker-compose, docker-container, docker-image, docker-swarm, dockerfile, kubernetes
- Language: C#
- Homepage:
- Size: 233 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Example Voting App
A simple distributed application running across multiple Docker containers.
## Getting started
Download [Docker Desktop](https://www.docker.com/products/docker-desktop) for Mac or Windows. [Docker Compose](https://docs.docker.com/compose) will be automatically installed. On Linux, make sure you have the latest version of [Compose](https://docs.docker.com/compose/install/).
This solution uses Python, Node.js, .NET, with Redis for messaging and Postgres for storage.
Run in this directory to build and run the app:
```shell
docker compose up
```
The `vote` app will be running at [http://localhost:8080](http://localhost:8080), and the `results` will be at [http://localhost:8081](http://localhost:8081).
Alternately, if you want to run it on a [Docker Swarm](https://docs.docker.com/engine/swarm/), first make sure you have a swarm. If you don't, run:
```shell
docker swarm init
```
Once you have your swarm, in this directory run:
```shell
docker stack deploy --compose-file docker-stack.yml vote
```
## Run the app in Kubernetes
The folder k8s-specifications contains the YAML specifications of the Voting App's services.
Run the following command to create the deployments and services. Note it will create these resources in your current namespace (`default` if you haven't changed it.)
```shell
kubectl create -f k8s-specifications/
```
The `vote` web app is then available on port 31000 on each host of the cluster, the `result` web app is available on port 31001.
To remove them, run:
```shell
kubectl delete -f k8s-specifications/
```
## Architecture

## Notes
The voting application only accepts one vote per client browser. It does not register additional votes if a vote has already been submitted from a client.
This isn't an example of a properly architected perfectly designed distributed app... it's just a simple
example of the various types of pieces and languages you might see (queues, persistent data, etc), and how to
deal with them in Docker at a basic level.