Dockerify Django

Fekete György (f@pulilab.com)

Senior Full-Stack Developer

pulilab.com

https://github.com/pulilab/dockerizing-django

http://slides.com/gyorgyfekete/dockerify-django (this)

Docker is porn

Thank you!

  • https://docs.docker.com/compose/django/
  • https://realpython.com/blog/python/django-development-with-docker-compose-and-machine/
  • https://www.calazan.com/using-docker-and-docker-compose-for-local-django-development-replacing-virtualenv/

 

Docker

Docker containers wrap up a piece of software in a complete filesystem that contains everything it needs to run: code, runtime, system tools, system libraries – anything you can install on a server. This guarantees that it will always run the same, regardless of the environment it is running in.

Docker 

VirtualMachine

Container

Why is it good?

  • Accelerate developer onboarding
  • Prototype faster
  • Try stuff out without the fear of causing conflict
  • DBAs and App Devs can have their own containers, later link them together
  • No environment inconsistencies
  • Scales perfectly

Why is it good? (more tech)

  • Docker uses btrfs (a copy-on-write filesystem) to keep track of filesystem diff's which can be committed and collaborated on with other users (like git)
  • Docker is a great image distribution model for server templates built with Configuration Managers (like Chef, Puppet, SaltStack, etc)
  • Docker has a central repository of disk images (public and private) that allow you to easily run different operating systems (DockerHUB)

Docker + Django ?

  • a lot of app dependencies (pip packages, bower, etc) - virtualenv vs docker
  • server app dependencies and configurations (nginx, gunicorn, uwsgi, redis, rabbitmq, postgres, postgis, mongodb, .....)
  • dev/local env vs staging/prod env differences

DEMO

DEMO

> docker-machine create -d virtualbox dev

 

Creating a new docker machine (Mac OS X)

DEMO

> eval "$(docker-machine env dev)"

 

Activate the new docker machine

DEMO

> docker-machine ls

 

List machines

DEMO

> docker-compose build

> docker-compose up -d

 

Build images

DEMO

> docker-compose run web python manage.py migrate

 

 

Migrate Django

DEMO

> docker-compose logs

 

 

Check logs

DEMO

> psql -h 192.168.99.100 -p 5432 -U postgres --password

 

 

Connect to DB

DEMO

> docker-machine create -d digitalocean --digitalocean-access-token=YOUR_TOKEN --digitalocean-region=ams3 production

 

 

PRODUCTION: create prod machine

DEMO

> eval "$(docker-machine env production)"

 

 

PRODUCTION: activate prod machine

DEMO

> docker-compose build

> docker-compose -f production.yml up -d

 

 

PRODUCTION: build prod image

DEMO

> docker ps

> docker exec dockerizingdjango_web_1 python manage.py migrate

 

 

PRODUCTION: run migrations on prod

Made with Slides.com