Close Menu
    DevStackTipsDevStackTips
    • Home
    • News & Updates
      1. Tech & Work
      2. View All

      This week in AI updates: Mistral’s new Le Chat features, ChatGPT updates, and more (September 5, 2025)

      September 6, 2025

      Designing For TV: Principles, Patterns And Practical Guidance (Part 2)

      September 5, 2025

      Neo4j introduces new graph architecture that allows operational and analytics workloads to be run together

      September 5, 2025

      Beyond the benchmarks: Understanding the coding personalities of different LLMs

      September 5, 2025

      Hitachi Energy Pledges $1B to Strengthen US Grid, Build Largest Transformer Plant in Virginia

      September 5, 2025

      How to debug a web app with Playwright MCP and GitHub Copilot

      September 5, 2025

      Between Strategy and Story: Thierry Chopain’s Creative Path

      September 5, 2025

      What You Need to Know About CSS Color Interpolation

      September 5, 2025
    • Development
      1. Algorithms & Data Structures
      2. Artificial Intelligence
      3. Back-End Development
      4. Databases
      5. Front-End Development
      6. Libraries & Frameworks
      7. Machine Learning
      8. Security
      9. Software Engineering
      10. Tools & IDEs
      11. Web Design
      12. Web Development
      13. Web Security
      14. Programming Languages
        • PHP
        • JavaScript
      Featured

      Why browsers throttle JavaScript timers (and what to do about it)

      September 6, 2025
      Recent

      Why browsers throttle JavaScript timers (and what to do about it)

      September 6, 2025

      How to create Google Gemini AI component in Total.js Flow

      September 6, 2025

      Drupal 11’s AI Features: What They Actually Mean for Your Team

      September 5, 2025
    • Operating Systems
      1. Windows
      2. Linux
      3. macOS
      Featured

      Harnessing GitOps on Linux for Seamless, Git-First Infrastructure Management

      September 6, 2025
      Recent

      Harnessing GitOps on Linux for Seamless, Git-First Infrastructure Management

      September 6, 2025

      How DevOps Teams Are Redefining Reliability with NixOS and OSTree-Powered Linux

      September 5, 2025

      Distribution Release: Linux Mint 22.2

      September 4, 2025
    • Learning Resources
      • Books
      • Cheatsheets
      • Tutorials & Guides
    Home»Development»How to Dockerize Your Django Project

    How to Dockerize Your Django Project

    April 18, 2025

    If you’re working on a Django project and you want to make your life easier – especially when it comes to running your app across different environments – Docker is your new best friend.

    Docker makes it possible to package your Django app, along with all its dependencies, into something called a “container.”

    That way, it runs the same on your computer, your teammate’s computer, a testing server, or even in production.

    When I first started using Docker, it felt a little overwhelming. But after setting it up for a few Django apps, it all clicked.

    The good news? I’m going to walk you through it, step by step, in a way that’s easy to follow, even if you’re brand new to Docker.

    Table of Contents

    1. What You’ll Need

    2. How to Dockerize Your Django Project

      • Step 1: Start a Django Project

      • Step 2: Create a Dockerfile

      • Step 3: Add a requirements.txt

      • Step 4: Create docker-compose.yml

      • Step 5: Run It!

    3. Common Issues

      • Port Already in Use?

      • Database Not Working?

    4. FAQs

      • Do I need Docker for development?

      • Can I run migrations inside Docker?

      • How do I stop everything?

    5. Extra Tip: Use .dockerignore

    6. What You’ve Built

    7. Want to Go Deeper?

    8. Further Reading

    What You’ll Need

    Before we begin, make sure you’ve got a few things installed:

    • Python 3 (any version that Django supports)

    • Django (of course)

    • Docker and Docker Compose
      👉 Install Docker
      👉 Install Docker Compose

    You don’t need to be an expert in Docker. I’ll explain what each part does as we build it together.

    How to Dockerize Your Django Project

    Step 1: Start a Django Project

    If you already have a Django project, you can skip this part.

    Otherwise, open your terminal and run:

    django-admin startproject myproject
    <span class="hljs-built_in">cd</span> myproject
    

    This will create a new Django project called myproject. You’ll see a structure like this:

    myproject/
    ├── manage.py
    └── myproject/
    <span class="hljs-code">    ├── __init__.py
        ├── asgi.py
        ├── settings.py
        ├── urls.py
        └── wsgi.py</span>
    

    Let’s say this is your app that you want to run inside Docker.

    Step 2: Create a Dockerfile

    In the root of your project (same folder as manage.py), create a file called Dockerfile. No file extension –just Dockerfile.

    Here’s what goes inside:

    <span class="hljs-comment"># Use the official Python image</span>
    <span class="hljs-keyword">FROM</span> python:<span class="hljs-number">3.10</span>-slim
    
    <span class="hljs-comment"># Set environment variables</span>
    <span class="hljs-keyword">ENV</span> PYTHONDONTWRITEBYTECODE=<span class="hljs-number">1</span>
    <span class="hljs-keyword">ENV</span> PYTHONUNBUFFERED=<span class="hljs-number">1</span>
    
    <span class="hljs-comment"># Set the working directory in the container</span>
    <span class="hljs-keyword">WORKDIR</span><span class="bash"> /app</span>
    
    <span class="hljs-comment"># Install dependencies</span>
    <span class="hljs-keyword">COPY</span><span class="bash"> requirements.txt /app/</span>
    <span class="hljs-keyword">RUN</span><span class="bash"> pip install --upgrade pip && pip install -r requirements.txt</span>
    
    <span class="hljs-comment"># Copy the rest of the code</span>
    <span class="hljs-keyword">COPY</span><span class="bash"> . /app/</span>
    

    Let me break that down:

    • FROM python:3.10-slim: This tells Docker to use a lightweight version of Python 3.10.

    • ENV: These just help with cleaner logs and better performance.

    • WORKDIR /app: This sets the default working directory inside the container.

    • COPY and RUN: These lines copy your code into the container and install your Python packages.

    Step 3: Add a requirements.txt

    You’ll need a file listing your Python packages.

    Create a file called requirements.txt in the root folder and add:

    Django>=4.0,<5.0
    

    You can add more later if your project grows. For now, that’s enough.

    To generate a full list of dependencies from your local virtual environment, run:

    pip freeze > requirements.txt
    

    Step 4: Create docker-compose.yml

    Now let’s create the file that tells Docker how to run everything together.

    In your root folder, create docker-compose.yml:

    <span class="hljs-attr">version:</span> <span class="hljs-string">'3.9'</span>
    
    <span class="hljs-attr">services:</span>
      <span class="hljs-attr">web:</span>
        <span class="hljs-attr">build:</span> <span class="hljs-string">.</span>
        <span class="hljs-attr">command:</span> <span class="hljs-string">python</span> <span class="hljs-string">manage.py</span> <span class="hljs-string">runserver</span> <span class="hljs-number">0.0</span><span class="hljs-number">.0</span><span class="hljs-number">.0</span><span class="hljs-string">:8000</span>
        <span class="hljs-attr">volumes:</span>
          <span class="hljs-bullet">-</span> <span class="hljs-string">.:/app</span>
        <span class="hljs-attr">ports:</span>
          <span class="hljs-bullet">-</span> <span class="hljs-string">"8000:8000"</span>
    

    Let’s go line-by-line:

    • build: .: This tells Docker to use the Dockerfile in the current folder.

    • command: This runs Django’s development server inside the container.

    • volumes: This mounts your code into the container so changes are reflected live.

    • ports: This maps port 8000 inside Docker to port 8000 on your machine.

    So if you go to http://localhost:8000, you’ll see your app.

    Step 5: Run It!

    Now the fun part. From your terminal, run:

    docker-compose up --build
    

    This tells Docker to:

    • Build the container

    • Install dependencies

    • Run the Django server

    If everything goes well, you’ll see logs from the Django server, and you can open your browser and go to http://localhost:8000.

    You should see the Django welcome screen.

    Common Issues

    Port Already in Use?

    If port 8000 is busy, change this line in docker-compose.yml:

    <span class="hljs-attr">ports:</span>
      <span class="hljs-bullet">-</span> <span class="hljs-string">"8001:8000"</span>
    

    Then go to http://localhost:8001.

    Database Not Working?

    If you need a database (like PostgreSQL), you can add another service to docker-compose.yml. Here’s an example with PostgreSQL:

    <span class="hljs-attr">services:</span>
      <span class="hljs-attr">db:</span>
        <span class="hljs-attr">image:</span> <span class="hljs-string">postgres</span>
        <span class="hljs-attr">environment:</span>
          <span class="hljs-attr">POSTGRES_DB:</span> <span class="hljs-string">mydb</span>
          <span class="hljs-attr">POSTGRES_USER:</span> <span class="hljs-string">user</span>
          <span class="hljs-attr">POSTGRES_PASSWORD:</span> <span class="hljs-string">password</span>
      <span class="hljs-attr">web:</span>
        <span class="hljs-attr">build:</span> <span class="hljs-string">.</span>
        <span class="hljs-attr">command:</span> <span class="hljs-string">python</span> <span class="hljs-string">manage.py</span> <span class="hljs-string">runserver</span> <span class="hljs-number">0.0</span><span class="hljs-number">.0</span><span class="hljs-number">.0</span><span class="hljs-string">:8000</span>
        <span class="hljs-attr">volumes:</span>
          <span class="hljs-bullet">-</span> <span class="hljs-string">.:/app</span>
        <span class="hljs-attr">ports:</span>
          <span class="hljs-bullet">-</span> <span class="hljs-string">"8000:8000"</span>
        <span class="hljs-attr">depends_on:</span>
          <span class="hljs-bullet">-</span> <span class="hljs-string">db</span>
    

    Then, update your settings.py in Django to use that database.

    FAQs

    Do I need Docker for development?

    No, but it helps keep your environment clean and consistent. If it works in Docker, it’ll work anywhere.

    Can I run migrations inside Docker?

    Yes! Just run:

    docker-compose run web python manage.py migrate
    

    How do I stop everything?

    Press Ctrl+C to stop the running server, and if you want to remove containers:

    docker-compose down
    

    Extra Tip: Use .dockerignore

    Just like .gitignore, you can create a .dockerignore file to avoid copying unnecessary files into the Docker container. Here’s a simple one:

    <span class="hljs-attribute">__pycache__</span>
    <span class="hljs-regexp">*.pyc</span>
    <span class="hljs-regexp">*.pyo</span>
    <span class="hljs-regexp">*.pyd</span>
    .env
    .git
    

    What You’ve Built

    By now, you’ve:

    • Created a Django project

    • Built a Docker container for it

    • Set up docker-compose to run everything

    • Learned how to manage it all easily

    Once you’re comfortable, you can expand this setup with static files, NGINX, Gunicorn, or even production-ready Docker builds.

    Want to Go Deeper?

    If this feels like a lot, that’s ok. It takes a little practice, but once you’ve done it a few times, Docker becomes second nature.

    You’ll spend less time debugging setup issues and more time coding your app.

    Further Reading

    • Docker Documentation

    • Django Official Docs

    • Compose File Reference

    Source: freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More 

    Facebook Twitter Reddit Email Copy Link
    Previous ArticleThink GeoGuessr is fun? Try using ChatGPT to guess locations in your photos
    Next Article How to Use Celery in Django

    Related Posts

    Development

    How to focus on building your skills when everything’s so distracting with Ania Kubów [Podcast #187]

    September 6, 2025
    Development

    Introducing freeCodeCamp Daily Python and JavaScript Challenges – Solve a New Programming Puzzle Every Day

    September 6, 2025
    Leave A Reply Cancel Reply

    For security, use of Google's reCAPTCHA service is required which is subject to the Google Privacy Policy and Terms of Use.

    Continue Reading

    Rilasciata Deepin 25: La distribuzione GNU/Linux immutabile con assistente vocale e pacchetti universali

    Linux

    From Failure to International Success: How Online Learning Platforms Saved My Life

    Development

    CVE-2025-4197 – Code-projects Patient Record Management System SQL Injection Vulnerability

    Common Vulnerabilities and Exposures (CVEs)

    10 Simple SEO Steps to Prepare Your Website This Fall (with B2B & B2C Tips)

    Web Development

    Highlights

    CVE-2025-42967 – SAP S/4HANA and SAP SCM Remote Code Execution Vulnerability

    July 7, 2025

    CVE ID : CVE-2025-42967

    Published : July 8, 2025, 1:15 a.m. | 35 minutes ago

    Description : SAP S/4HANA and SAP SCM Characteristic Propagation has remote code execution vulnerability. This allows an attacker with high privileges to create a new report with his own code potentially gaining full control of the affected SAP system causing high impact on confidentiality, integrity, and availability of the application.

    Severity: 9.1 | CRITICAL

    Visit the link for more details, such as CVSS details, affected products, timeline, and more…

    CVE-2025-5727 – SourceCodester Student Result Management System Cross-Site Scripting Vulnerability

    June 6, 2025

    State Management in React and Next.js: Redux vs Recoil vs Zustand

    July 28, 2025

    CVE-2025-9375 – Apache xmltodict XML Injection Vulnerability

    September 1, 2025
    © DevStackTips 2025. All rights reserved.
    • Contact
    • Privacy Policy

    Type above and press Enter to search. Press Esc to cancel.