Subscribe to our Newsletter 

Containerizing Python web apps with Docker
Blog

Containerizing Python Web Apps with Docker

Containerizing Python web apps with Docker is a game-changer for modern development teams. By packaging your Python application and its dependencies into isolated Docker containers, you ensure consistency across different environments, streamline deployment, and simplify scaling. In this guide, you’ll learn how to containerize a Python web application using Docker, from setup to best practices, with actionable steps and practical tips.

Docker has revolutionized how developers build, ship, and run applications. For Python web apps, containerization means you can avoid the classic “it works on my machine” problem, deploy reliably to any environment, and easily integrate with container apps, cloud platforms, and DevOps pipelines. Whether you’re building with Flask, FastAPI, or Django apps, Docker helps you manage dependencies, automate deployment, and optimize your infrastructure.

Prerequisites

Before you start containerizing Python web apps with Docker, make sure you have:

  • Python 3.7 or higher installed on your local machine
  • The latest version of Docker Desktop
  • A code editor (such as Visual Studio Code)
  • Basic command-line knowledge

If you’re interested in broader cloud infrastructure solutions, check out our guide on cloud infrastructure management.

Setting Up Your Python Web Application

Let’s start by creating a simple Python web app. You can use popular frameworks like Flask or FastAPI. Here’s an example directory structure for a typical project:

python-web-app/
|-- app.py
|-- requirements.txt
|-- Dockerfile
|-- .dockerignore
  • app.py: Your main application code (Python script)
  • requirements.txt: List of dependencies (e.g. pip install r requirements.txt)
  • Dockerfile: Instructions for building your Docker container image
  • .dockerignore: Files and folders to exclude from the container

This app folder structure keeps your project organized and ready to containerize a Python application.

Creating a Dockerfile for Your Python Web App

The Dockerfile is the blueprint for your Docker container. Here’s a typical Dockerfile for a Python web application:

FROM python:3.12-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 8000
CMD ["python", "app.py"]

Explanation of each instruction:

  • FROM: Uses the official Docker Hub Python image as the base image
  • WORKDIR: Sets the working directory inside the Docker container
  • COPY requirements.txt .: Copies your dependency list to the container
  • RUN pip install: Installs dependencies within the Docker container image
  • COPY . .: Copies your application code into the container
  • EXPOSE: Exposes the specified port to access your Python app
  • CMD: Specifies the command to run your python application

For more on automating these steps, visit our DevOps automation page.

Building and Running Your Docker Container

With your Dockerfile ready, build your Docker image using the following command:

docker build -t python-web-app .

Then, run your Docker container:

docker run -p 8000:8000 python-web-app

Now, open your browser and go to http://localhost:8000 to see your web application running inside the container.

Using Docker Compose for Multi-Container Apps

Most real-world containerized apps need more than just a web server, they may require a PostgreSQL instance, caching layers, or other services. Docker Compose lets you define and manage multi-container setups using a Docker Compose file.

Here’s an example docker-compose.yml for a Django application with a PostgreSQL database:

version: "3"
services:
  web:
    build: .
    ports:
      - "8000:8000"
    environment:
      - DATABASE_URL=postgres://user:password@db:5432/mydb
  db:
    image: postgres:15
    environment:
      - POSTGRES_USER=user
      - POSTGRES_PASSWORD=password
      - POSTGRES_DB=mydb

Run the services using the run command:

docker compose up

This method allows you to deploy using the same environment across dev, staging, and prod. It also prepares you for cloud migration initiatives.

Best Practices for Containerizing Python Web Apps

To get the most from containerizing Python web apps with Docker, follow these best practices:

  • Use slim or alpine Docker images to reduce size
  • Leverage the .dockerignore file to exclude unnecessary files
  • Pin dependency versions in requirements.txt
  • Use environment variables for secret key and config (never hard-code)
  • Run your Python app as a non-root user
  • Keep images up to date for security patches

For compliance and policy enforcement, check out our cloud compliance solutions.

Troubleshooting Common Issues

Common problems when containerizing Python applications include:

  • Port conflicts: Ensure EXPOSE matches app port
  • Dependency errors: Check the requirements.txt file
  • File permissions: Validate correct permissions on app folder
  • Unset environment variables: Use docker compose or docker run -e to define them

Advanced Topics

Environment Variables and Secrets Management

Use Docker Compose or Docker commands with the -e flag to inject environment variables. Store sensitive data outside the Dockerfile and use external secrets managers.

Adding Health Checks

Add a HEALTHCHECK instruction in the Dockerfile to detect failure states in your containerized applications.

Logging and Monitoring Basics

Send logs to stdout/stderr so Docker can capture them. For advanced monitoring, see our AI gateway solution.

Containerizing Python web apps with Docker enables consistent builds, seamless deployment, and robust infrastructure management. Whether you’re pushing to a container registry, deploying to Azure App Service, or scaling with Azure Container Apps, the Docker process helps create a new environment with ease.

Explore additional ways to optimize your deployments and reduce cloud costs at our cloud cost optimization guide.

FAQs

What is Docker and why should I use it for Python web apps?

Docker standardizes deployment across different environments, using container images to ensure consistency.

How do I write a Dockerfile for a Python web application?

A Dockerfile contains necessary instructions to install dependencies and define run commands.

What are best practices for containerizing Python apps?

Use secure base images, environment variables, and proper file permissions.

Can I use Docker Compose with Python applications?

Yes. It helps manage multiple services, including PostgreSQL instances, in the same environment.

How do I scale containerized Python applications?

Use Docker’s orchestration features or platforms like Azure Container Apps.

How do I troubleshoot problems in a Docker container?

Use docker logs, verify Docker commands and inspect configuration files.

Ready to build containerized applications efficiently? Follow this guide and enhance your CI/CD pipelines, cloud readiness, and dev workflows with containerizing Python web apps with docker.

Share this post:

Focus on building your product. We’ll handle the cloud.

Experience full control over your cloud infrastructure today!

Keep reading

Kubernetes resource limits & autoscaling issues
Expert insights
Kubernetes CPU Limits: Everything You Need to Know
Dockerfile automation guide
Expert insights
What Is a Dockerfile? Guide, Syntax, Examples & Best Practices

Sign up for a free demo

Enter your data and we will contact you to provide a full demo of our services.