Skip to content

Recitation 7: Microservices and Docker

Prerequisites

You should have downloaded Docker. If you haven't follow the installation instructions here

Setup Instructions (10 min):

Fork this repo and clone it.

Overview

During this recitation, students will create a simple FastAPI app, containerize it and deploy it.

Context

Whos-my-ta is a microservice that provides information about recitation sections. By using the section_id endpoint, you can enter the section id (for example: a) to get the names of the TAs that are in charge of that section.

Try it out using this link: https://whos-my-ta.fly.dev/section_id/a

Sadly, you still are unsure when your recitation time is.

All you have to do is build a new service that builds on top of this microservice by including the time of the recitation as well. You will do this by implementing the section_info endpoint.

The endpoint has to return a JSON object in the following form:

{
  "section": "section_name",
  "start_time": "HH:MM",
  "end_time": "HH:MM",
  "ta": ["taName1", "taName2"]
}

Activity

  1. Implement the section_info endpoint according to the specifications. You can edit app/main.py to do so.
  2. Test it by running the app locally. To install necessary files:
pip install -r requirements.txt
  1. To run the app locally use the following command. Change the port number if you need to:
uvicorn app.main:app --host 0.0.0.0 --port 8080
  1. Implement ./Dockerfile. You can use the slides and this link as resources.
  2. Create the docker image using the command below, and check that the image has been created.
docker build -t YOUR_IMAGE_NAME  .
  1. Implement ./docker-compose.yml. You can use the slides for reference.
  2. Create a container using the docker image using the command below.
docker-compose up -d
  1. Check that your container is running correctly by locally invoking the endpoint. You can try http://localhost:8080/section_id/a. Change the port number (8080) according to your docker-compose.yml.

Bonus

Try deploying your container using instructions from here.