2017-10-31 Tags: hacking python docker django
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.
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
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
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
Since we define -
.:/app as a volume, this means that all of your local changes are immediately visible in the dockerized app.
docker-compose exec app bashor
docker-compose exec db bash.