Microsoft Dev Containers allow you to create isolated development environments, which makes it easier to develop and collaborate, without worrying about compatibility issues.
In this template, we have two services:
- The main application, which is developed in Python using FastAPI framework.
- The database with which the main application will communicate.
Here, the Python service is not containerized by default. This emulates a scenario where application is developed locally, with all the dependencies controlled inside a Python virtual environment.
Even though this app makes it to production inside a Docker container, this is the usual way ot develop an application locally.
The database, however, is deployed inside a Docker container, using a docker-compose.yml file for simplicity. We are using MongoDB for this.
The application that I have developed for the demo is a simple CRUD in which three components are involved: the client, the server and the database.
For the server, we are using FastAPI, a high performance framework for Python; for the database, we are using MongoDB.
The objective of the app is to save users together with a dice number for an online card game. User data, such as name and e-mail, will be saved, along with a dice that is assigned randomly each time we create a user.
The sequence diagram of the Create User operation looks like this:
In order to get this app up and running, we need to deploy the two services.
First, we need to deploy the database. A simple docker-compose
command will do:
$ docker-compose up -d
Then, we can deploy the main service inside a Python virtual environment (to avoid dependency issues). We are using Python 3.10 for this app:
$ python -m venv venv
$ source venv/bin/activate
Now, we deploy the application inside the virtual environment one of two ways:
$(venv) pip install -r app/requirements.txt
$(venv) python app/main.py
Or do make all
, which will deploy the database, install the requirements and deploy our application for us.
$(venv) make all
In order to get this app up and running, we still need to deploy the two services.
First, we need to deploy the database, as before:
$ docker-compose up -d
Then, we now can open the environment inside a Development Container using the Dev Container extension shortcut: Open Folder in Container
. If you have opened this workspace before, you can click on the extension Reopen in Container
, which will remember your container.
Once inside the container, the dependencies must be installed due to postCreateCommand from devcontainer.json. Here, we don't need a Python virtual environment, since we are currently in one!
To launch the app service:
$ python app/main.py
Or
$ make run