Dockerized PostgreSQL and Django for Local Development

| programming | devops | databases |

Docker and docker-compose make it dead simple to avoid dependency hell and have a consistent environment for your whole team while doing local development. This post walks through setting up a new Django project from scratch to use Docker and docker-compose. It is modeled after a previous post that I wrote about doing a similar thing with Laravel and MySQL.

Dockerfile

Nothing too interesting happening here. Installing python and pip.
FROM ubuntu:16.04

system update

RUN apt update RUN apt upgrade -y

python deps

RUN apt install -y python3-dev python3-pip

docker-compose.yml

version: '2'
services:
  app:
    build: .
    ports:
      - "8000:8000"
    volumes:
      - .:/app
    working_dir: /app
    command: bash -c "pip3 install -r requirements.txt && python3 manage.py migrate && python3 manage.py runserver 0:8000"
    depends_on:
      - db
  db:
    image: postgres:9.6.5-alpine
    environment:
      - POSTGRES_USER=feedread
      - POSTGRES_PASSWORD=feedread
    volumes:
      - ./data:/var/lib/postgresql/data
    ports:
      - "5432:5432"
With this in place you can start your Django app with docker-compose up. Each time the app starts it will install the latest dependencies, run migrations, and start serving the app on localhost:8000

Notes

  1. In order to do stuff with the database locally you should add the following record to your local /etc/hosts file
    # /etc/hosts
    

    127.0.0.1 db

  2. Since we define - .:/app as a volume, this means that all of your local changes are immediately visible in the dockerized app.
  3. If you need to access the running app or db container you can do so with docker-compose exec app bash or docker-compose exec db bash.
  4. This docker-compose file is not really suitable for production since it is not likely that you would want to build the container each time the app starts or automatically run migrations.
  5. You can add additional services like memcached, a mail server, an app server, a queue, etc., using the same method that we are using above with our database.

Thank you for reading! Share your thoughts with me on bluesky, mastodon, or via email.

Check out some more stuff to read down below.

Most popular posts this month

Recent Favorite Blog Posts

This is a collection of the last 8 posts that I bookmarked.

Articles from blogs I follow around the net

“It Gives Great Demo”

There’s that famous video of Steve Jobs explaining why they don’t didn’t make touchscreen MacBooks: We thought about [a touch screen MacBook] years ago. We’ve done tons of user testing on this and it turns out it doesn’t work! Touch surfaces don’t want to...

via Jim Nielsen’s Blog November 4, 2026

On the road for 8 months: Retrospective

My Trip around the world is now almost 8 months-in. Crazy to look back at the times and all the (36!) Countries I’ve visited, sometimes a day, sometimes almost 2-months! I have now turned 26, and am writing this blog on a phone in a café in Warsaw, Poland....

via Junwoo Hwang November 4, 2026

The Trump Era is Collapsing and Big Tech is Officially On Notice

Cycles Hyped No More on November 4, 2026 The American electorate has spoken. And it’s not just MAGA Trumpism which has been repudiated, but the unseemly reign of douchebag techbroism. Cycles Hyped No More is a monthly column by Jared White where he takes a...

via The Internet Review November 4, 2026

Generated by openring