If you’re new to Docker and containers, learning to deploy a Python Flask API application on Docker is a great way to start. Docker lets you containerize applications with light-weighted technology and security for quick application deployment.
In this tutorial, you’ll learn to become your own master in setting up and deploying Python Flask API applications on Docker containers.
Get ready and start deploying!
Table of Contents
If you’d like to follow along step-by-step, you will need the following installed:
- Ubuntu machine with Docker installed. This tutorial uses Ubuntu 18.04.5 LTS with Docker v19.03.8.
- Python v3.9 or later installed on Ubuntu machine. This tutorial will be using Python v3.9.2 on a Ubuntu Machine.
- Elinks package installed on the Ubuntu machine used to test the API in this tutorial.
Creating a Python Flask API Application (GET and POST API)
Kick-off this tutorial by creating a Python Flask application. Flask is a lightweight WSGI micro web application framework written in Python. Flask provides handy tools and features in creating web applications in Python.
Before creating a Python Flask application, you’ll install a Python Flask and Python virtual environment where Flask will run an application.
1. Log in to your Ubuntu machine using your favorite SSH client.
2. Next, run the following commands to create a directory named ~/docker_python_flask_demo and switch to that. This directory will hold all the files required by Python and Docker to run an application.
mkdir ~/docker_python_flask_demo cd ~/docker_python_flask_demo
3. Run the
pip command below to
install a Python virtual environment (
virtualenv) needed by Flask to execute the applications. A Python virtual environment offers its own Python binary and per-application installed packages to avoid conflicts with other applications.
pip install virtualenv
5. Now, run the below command to install the Python
flask package with the
pip package manager.
pip install flask
6. Run the following command to activate packages in your virtual environment before you can start installing or using them. This modifies the
VIRTUAL_ENV environment variable to point to your virtual environment and prepends the virtual environment Python binary to the path so you run the correct binary.
7. Create one more file, named requirements.txt, and define the dependency of the Flask application, as shown below.
8. Create a text file ~/docker_python_flask_demo/app.py and populate the file with the below Python code.
The below Python code imports the Python
flask class and creates a class instance named
app class instance contains two
login() functions executed when users send requests on
success() function then executes, displaying the welcome “name-of-the-user” message on the browser.
from flask import Flask , redirect , url_for , request # Importing the class flask # app is the object or instance of Flask app = Flask(__name__) # app.route informs Flask about the URL to be used by function @app.route('/success/<name>') # Creating a function named success def success(name): return 'welcome %s' % name @app.route('/login', methods = ['GET','POST']) # Creating a function named login def login(): if request.method == 'POST': user = request.form['adamlistek'] return redirect(url_for('success', name = user)) else: return "INVALID" # Programs executes from here in a development server (locally on your system) # with debugging enabled. if __name__ == '__main__': app.run(debug = True)
9. Create one more file named ~/docker_python_flask_demo/form.html and copy/paste the below code.
Running the HTML code below creates a form with two inputs; one is text to provide your name, and the other is a submit button.
As soon as you provide a username and hit the submit button, a post request is sent, and Flask executes another function and opens a new web page on http://localhost:5000/success/<username>.
<html> <body> <form action="http://localhost:5000/login" method="post"> <p>Please Enter your name</p> <p><input type="text" name="adamlistek" /></p> <p><input type="submit" value="Submit" /></p> </form> </body> </html>
10. Finally, run the
Python command below to verify the application (
app.py) works locally on your system.
As you can see below, the application is running successfully on the Ubuntu machine but not on Docker. You’ll launch the same application on Docker in the following sections.
Creating a Dockerfile to Deploy the Python Flask API Application
You’ve just created and verified the Python Flask application works locally on your machine. But before deploying the application on Docker, you’ll first create a Dockerfile to define all sets of instructions to build the Docker image.
Create a file named Dockerfile in the ~/docker_python_flask_demo directory, and copy/paste the content below to the Dockerfile.
Docker will use this Dockerfile to run all the instructions or commands necessary to build a new Docker image on top of the base image (
# Sets the base image for subsequent instructions FROM ubuntu:18.04 # Sets the working directory in the container WORKDIR /app RUN apt-get update -y RUN apt-get install -y python-pip python-dev # Copies the files to the working directory COPY form.html /app/form.html # Copies the dependency files to the working directory COPY requirements.txt /app/requirements.txt # Install dependencies RUN pip install -r requirements.txt # Copies everything to the working directory COPY . /app # Command to run on container start CMD [ "python" , "./app.py" ]
Now, run the
tree command below to verify all of the required files to run the Python Flask application are contained in the working directory (~/docker_python_flask_demo).
Building a Docker Image for Python Flask API Application
You now have the required files to deploy a Python Flask application, but those files won’t do anything unless you build an image. You’ll run the
docker build command to build a Docker image based on the instructions you set in the Dockerfile.
docker build command below to build a Docker image in the working directory (
.). This command tags (
-t) the image as
flask-image version 1 (
sudo docker build -t flask-image:v1 .
Now, run the
docker command below to list all available images.
sudo docker images
Below, you can see various attributes returned, such as REPOSITORY. Notice the REPOSITORY name is flask-image and is tagged with a version (v1), as shown below.
Running the Python Flask Application in Docker Container
After creating a Docker image, you can now run the Python flash application in a Docker container. A Docker container packages up code and its dependencies to run applications quickly.
1. Execute the
docker run command below to perform the following:
- Start the container in detached mode (
-d), so it runs as a background process and returns the console output upon creation.
- Maps the Docker host port (
-p 5000:5000) with the container’s port.
- Launches the Docker container (
sudo docker run -d -p 5000:5000 flask-image:v1
2. Next, run the
docker command below to list all containers in the Docker engine. Verify if Docker successfully created the container.
sudo docker ps -a
3. Finally, run the command below to open your web browser in the Ubuntu machine using elinks.
The command opens the web browser on the terminal and prompts for a name, as shown below.
Enter your name and hit the Submit button.
4. As you can see below, after hitting the Submit button, the login function redirects to the success function in the Flask application.
This tutorial aimed to help you through the process of setting up a Python Flask API Docker container using Docker images. You’ve also touched on how to launch Python Flask containers using Dockerfiles, which allows you to edit and build customized containers of your choice.
So what other applications do you have in mind to deploy on Docker container? Perhaps a Docker MongoDB container?
More from Adam The Automator & Friends
Get this interactive comic book to learn how Veeam and AWS can help you fight ransomware, data sprawl, rising cloud costs, unforeseen data loss and make you a hero!
ATA is known for its high-quality written tutorials in the form of blog posts. Support ATA with ATA Guidebook PDF eBooks available offline and with no ads!
Check out all of the ATA recommended resources!