You're going to build a docker-compose.yml for an awesome web app.
Clone this repo:
https://github.com/sheeplepie/small-web-db
Here's a skeleton docker-compose.yml:
version: '3'
services:
app:
db:
volumes:
The application needs a backend MongoDB to function. You'll also want to map the MongoDB storage files to somwhere convenient on your host for easy back-up.
You'll have to google around for these exercises, but we're here to help so just holler if you need a hand.
The app container is built from a custom image. The Dockerfile is in the cloned repo.
Amend the docker-compose.yml skeleton to build the Dockerfile.
See if it build with docker-compose up.
The app's Dockerfile doesn't have a CMD option, so a container built from it will do nothing and fizzle out.
You could amend the Dockerfile to add a CMD as we did before, but instead use the compose command option to run python3 /app/app.py when it's brought up.
Give it a spin with docker-compose up.
Get a shell on your app container and browse around. Make sure the /app/ directory is in the root and has what you expect. List processes on your host to check that you're running a python3 process.
You want to bind port 80 in the container to a port on the host, let's say 8000.
At this point you don't have a DB so the service should timeout and throw a 500 if you curl localhost:8000.
Give yourself a DB. The service uses MongoDB and the latest image should do.
Make sure your DB service is called db (or name it whatever you want and ensure it matches in /app/app.py, then rebuild the image when you spin up: docker-compose up --build).
Make sure you tell compose to spin up db before app.
You should now be able to hit the service.
Use a named volume to store your database files in an easily accesible way (/data/db/ directory on the mongo image).