Wednesday 6 April 2022

Docker Compose to set up and run a simple Django/PostgreSQL app


docker --version
Docker version 20.10.12, build e91ed57

Create a Dockerfile

sudo mkdir Docker-Django

cd Docker-Django

cat Dockerfile

# syntax=docker/dockerfile:1
FROM python:3
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1
WORKDIR /code
COPY requirements.txt /code/
RUN pip install -r requirements.txt
COPY . /code/

cat requirements.txt
Django>=3.0,<4.0
psycopg2>=2.8

cat docker-compose.yml
version: "3.9"
   
services:
  db:
    image: postgres
    volumes:
      - ./data/db:/var/lib/postgresql/data
    environment:
      - POSTGRES_DB=postgres
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
  web:
    build: .
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    environment:
      - POSTGRES_NAME=postgres
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
    depends_on:
      - db 

sudo docker-compose run web django-admin startproject composeexample .


Django-admin created are owned by root. Change the ownership of the new files.

sudo chown -R ubuntu:ubuntu

ls -l


Connect the database

Edit the composeexample/settings.py file, Replace the DATABASES = ... with the following.

sudo vim composeexample/settings.py
# settings.py
   
import os
   
[...]
   
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': os.environ.get('POSTGRES_NAME'),
        'USER': os.environ.get('POSTGRES_USER'),
        'PASSWORD': os.environ.get('POSTGRES_PASSWORD'),
        'HOST': 'db',
        'PORT': 5432,
    }
}

sudo docker-compose up

sudo docker ps

http://localhost:8001/


Ref: https://docs.docker.com/samples/django/






No comments:

Post a Comment