Table of Contents
Deploying modern web applications efficiently requires the right tools and workflows. FastAPI, a high-performance web framework for Python, combined with Docker, a containerization platform, offers a powerful solution for deploying scalable and portable applications. This guide provides a step-by-step workflow to deploy FastAPI applications using Docker.
Prerequisites
- Python 3.8 or higher installed on your machine
- Docker installed and running
- Basic knowledge of FastAPI and Docker commands
Step 1: Create Your FastAPI Application
Start by creating a simple FastAPI app. Save this as main.py.
Example:
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def read_root():
return {"message": "Hello, FastAPI with Docker!"}
Step 2: Write a Dockerfile
Create a Dockerfile in the same directory as your main.py. This file defines how your application will be containerized.
FROM python:3.11-slim WORKDIR /app COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt COPY . . CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
Step 3: Specify Dependencies
Create a requirements.txt file with the necessary dependencies.
fastapi uvicorn
Step 4: Build the Docker Image
Open a terminal in your project directory and run the following command to build your Docker image. Replace your-image-name with a name of your choice.
docker build -t your-image-name .
Step 5: Run the Docker Container
Start a container from your image to run your FastAPI app.
docker run -d -p 8000:8000 your-image-name
Step 6: Access Your Application
Open your browser and navigate to http://localhost:8000. You should see the JSON response from your FastAPI app.
Additional Tips
- Use Docker Compose for multi-container applications.
- Implement environment variables for configuration.
- Optimize your Dockerfile for production by reducing image size.
By following these steps, you can deploy FastAPI applications quickly and reliably using Docker, ensuring portability and ease of maintenance for your modern web apps.