Revisiting https://www.pn.therealvan.com/2021/01/24/postgresql-and-mysql-docker-containers/, this post focuses on a plain Django app with minimal dependencies:
- exclude pipenv
- using the default SQLite DB
Bootstrapping
Start with these files:
Dockerfile
FROM python:3
ENV PYTHONUNBUFFERED 1
WORKDIR /code
#COPY requirements.txt /code/
#RUN pip install --upgrade pip && pip install -r requirements.txt
docker-compose.yml
version: '3'
services:
app:
build: .
#command: >
# sh -c "python manage.py migrate &&
# python manage.py runserver 0.0.0.0:8000"
ports:
- "8000:8000"
expose:
- "8000"
volumes:
- ./:/code
tty: true
stdin_open: true
Run these to start up a container:
docker-compose build docker-compose run --rm app /bin/bash
Initializing a Django project
Run these inside the container:
pip install django pip freeze > requirements.txt django-admin startproject myproj . django-admin startapp myapp exit
Rebuild and start the app
Now uncomment the lines in Dockerfile
and docker-compose.yml
.
Build the image and restart the container:
docker-compose build
Modify myproj/settings.py
to add a line to register myapp
to Django:
INSTALLED_APPS = [
...
'myapp.apps.MyappConfig', # Add this line
]
Now start the app again:
docker-compose up app
This should now bring up the app listening to http://localhost:8000/