Django Deployment: A Step-by-Step Guide Using Docker

Django Deployment: A Step-by-Step Guide Using Docker

Docker simplifies deploying Django applications, making the process efficient and scalable. In this guide, we walk you through setting up and deploying a Django application with Docker, from containerizing your app to running it in a production environment. Learn how to leverage Docker for streamlined deployment and easy management of your Django projects."

├── compose.yaml
├── app
    ├── Dockerfile
    ├── requirements.txt
    └── manage.py

Dockerfile

# syntax=docker/dockerfile:1.4

FROM --platform=$BUILDPLATFORM python:3.7-alpine AS builder
EXPOSE 8000
WORKDIR /app 
COPY requirements.txt /app
RUN pip3 install -r requirements.txt --no-cache-dir
COPY . /app 
ENTRYPOINT ["python3"] 
CMD ["manage.py", "runserver", "0.0.0.0:8000"]

FROM builder as dev-envs
RUN <<EOF
apk update
apk add git
EOF

RUN <<EOF
addgroup -S docker
adduser -S --shell /bin/bash --ingroup docker vscode
EOF
# install Docker tools (cli, buildx, compose)
COPY --from=gloursdocker/docker / /
CMD ["manage.py", "runserver", "0.0.0.0:8000"]

manage.py

#!/usr/bin/env python
import os
import sys

if __name__ == "__main__":
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "example.settings")
    try:
        from django.core.management import execute_from_command_line
    except ImportError:
        # The above import may fail for some other reason. Ensure that the
        # issue is really that Django is missing to avoid masking other
        # exceptions on Python 2.
        try:
            import django
        except ImportError:
            raise ImportError(
                "Couldn't import Django. Are you sure it's installed and "
                "available on your PYTHONPATH environment variable? Did you "
                "forget to activate a virtual environment?"
            )
        raise
    execute_from_command_line(sys.argv)

requirements.txt

Django==3.2.13
environs==7.3.1

compose.yaml

services:
  web: 
    build:
      context: app
      target: builder
    ports: 
      - '8000:8000'

open url

http://127.0.0.1:8000/

Did you find this article valuable?

Support Mandeep Singh Blog by becoming a sponsor. Any amount is appreciated!