1. Django and Docker: a marriage
made in heaven
Ken Cochrane
DjangoCon US 2013
1
2. About me
• Ken Cochrane (@KenCochrane)
• Engineer at dotCloud (Corporate sponsor
of Docker)
• Work on Docker and Docker related
projects (index, registry, docs, etc)
• Django user since 0.96.1
2
6. Quick survey
• How many people have heard of Docker
before today?
• How many people have tried Docker?
4
7. Quick survey
• How many people have heard of Docker
before today?
• How many people have tried Docker?
• How many people are using Docker on a
project today?
4
8. Where did Docker come from?
• Docker is a rewrite of similar code
that currently powers the dotCloud
PaaS
• Original version written in Python,
new version written in Go.
• Still a very young project, but mature
for it’s age.
5
9. Docker Timeline
• January 2013 Docker started as internal project inside of
dotCloud
• March 21, 2013 Solomon gives Docker lighting talk at
PyCon US
• March 27, 2013 Docker released to Public
• June 2013 Docker adds OpenStack compatibility
• August 2013 Docker 0.6 released
6
10. In the first 6 months
• 5300+ GitHub stars
• 125+ contributors
• 50,000+ docker index pulls
• 100’s of projects built on top of Docker
• UI’s, mini-PaaS, remote desktop,etc
• 1000’s of Dockerized applications
7
11. What is Docker?
• Docker is an open-source engine that
automates the deployment of any
application as a lightweight, portable,
self-sufficient container that will run
virtually anywhere.
8
12. How does Docker work?
• LinuX Containers (LXC)
• Control Groups & Namespaces
• AUFS
9
13. LinuX Containers (LXC)
• lets you run a Linux system within another
Linux system
• A container is a group of processes on a Linux
box, put together in an isolated environment
• Inside the box, looks like a VM.
• Outside of the box, it looks like normal
processes.
• chroot on steroids
10
14. Why Containers?
• Speed: Boots in seconds.
• Footprint: 100-1000 containers on one
machine. Small disk requirements
11
21. Binary install
• wget http://get.docker.io/builds/Linux/x86_64/docker-latest.tgz
• tar -xf docker-latest.tgz
• sudo ./docker -d &
• Still need to install system startup script
18
22. Docker on Digital Ocean in 5 easy steps
# Create Ubuntu 13.04 64 Bit Droplet, Then
$ sudo apt-get update
$ sudo apt-get install linux-image-extra-`uname -r`
$ sudo sh -c "curl http://get.docker.io/gpg | apt-key add -"
$ sudo sh -c "echo deb https://get.docker.io/ubuntu docker main > /etc/apt/
sources.list.d/docker.list"
$ sudo apt-get update && sudo apt-get install lxc-docker
19
23. Docker on Digital Ocean in 1 step
When creating the Droplet. Select the
Docker image under the application
20
24. Awesome Sauce
• The Awesome folks at Digital Ocean has given everyone
here a great deal.
• No more excuses! Try Docker for Free on Digital Ocean
• Go to http://tinyurl.com/docker10 and enter in the
promo code DJANGOCON2013 when prompted for a
$10 credit. SSD backed VPS servers as low as $5/month
Do it now, before the deal expires.
• http://tinyurl.com/docker10
21
28. Unit testing
• Use containers to isolate tests into their own
environment.
• No more worrying about tests not cleaning
up after themselves.
• Parallelize the tests across multiple machines
25
29. System Testing
• Easily create all the different system
configurations to test against
• No need to worry about breaking or rebuilding a
test server
• Test Fabric scripts
• http://agiliq.com/blog/2013/06/self-testing-fabfile-using-docker/
26
30. Continuous Integration
• Run unit tests after each source commit
• StriderCD.com - Open source CI server
• Uses Docker Containers to run CI tests
before deployment.
• TravisCI is also playing with Docker
27
33. Dokku
• Open source PaaS
• Docker powered mini-heroku
• Less than 100 lines of Bash
• Heroku buildpacks
• Git push deployment
• https://github.com/progrium/dokku
30
34. Flynn.io
• Open source PaaS written in Go
• Uses Docker to manage containers
• One of the founders is author of Dokku
• Still in development
31
35. deis.io
• Open source written in Python
• Git push deployments
• Docker images, chef recipes or Heroku
buildpacks
• Supports scaling and application
formation
32
41. Local Dev Setup
• VM’s are heavy, containers not so much
• Run 100’s of containers on laptop vs a handful
of VMs
• Easier to duplicate production environment if
you have a complex setup.
• http://blog.scoutapp.com/articles/2013/08/28/docker-git-for-deployment
38
43. Cool projects
• npmt.abru.pt: Node.js Module (NPM) testing
• ptone/jiffylab: Zero configuration Python/Unix web
based teaching environment
• kitchen-Docker: Docker driver for Ruby’s test kitchen
• MemcachedAsaService.com
• Try RethinkDB, openstack-docker
• Many many more.
40
44. npmt.abru.pt
• Autonomously Testing All NPM modules
• One container per module is created then
destroyed when test is finished.
• 39496 modules verified
41
45. kitchen-docker
• A Ruby framework for running integration
tests in an isolated environment
• Uses Docker to run tests in containers
• https://github.com/portertech/kitchen-docker
42
46. JiffyLab
• Created by Preston Holmes
• Provides an entirely web based
environment for instruction.
• Python and UNIX shell env running in it’s
own Docker container
• https://github.com/ptone/jiffylab
43
47. Memcached SaaS
• Built as a class project
• Memcached SaaS built on top of Docker
• Built with Ruby on Rails
• https://github.com/jbarbier/SaaS_Memcached/
44
48. Try RethinkDB
• SaaS that let you try out RethinkDB
• One DB per container
• Containers killed within 24 hours
• 1000’s of containers on one host
45
51. Docker terms
• Container: Linux container
• Image: a snapshot of a container that when run creates a new
container.
• Index: Public docker image directory
• Dockerfile: An automated script used to create an Image
• Push/pull : Commands used to get images to and from the index
• Run: Start a Docker image to create a running Container
48
52. Common commands
• ps : lists the containers on the system
• images : lists the images on the system
• run : runs commands against an image to create a container
• stop : stops a running command
• build : builds a Dockerfile
• inspect: shows you information about a container
• pull: pulls down a new image from the docker index
• logs: shows the logs for a given container
49
57. Dockerfiles
• Simple scripting language
• Automate the creation of docker images
• Built in caching
• Add them to any project repo to
Dockerize the project.
• Online tutorial
• http://www.docker.io/learn/dockerfile/
54
58. Building Images by hand
# start a ubuntu 12.10 container
$ docker run -i -t ubuntu:12.10 bash
# update the apt repo
[a2bc13] $ apt-get update
# install curl
[a2bc13] $ apt-get install curl
# exit out of container
[a2bc13] $ exit
# save changes to container as an image
$ docker commit -m "comment" a2bc13 username/image
55
59. Build image using Dockerfile
# curl image
# VERSION 0.1
FROM ubuntu:12.10
MAINTAINER yourName name@example.com
RUN apt-get -qq update
RUN apt-get install -y curl
56
60. Docker build
• docker build .
• docker build - < Dockerfile
• docker build github.com/creak/docker-firefox
• use “-t” to tag built image
• docker build -t myname/myimage .
57
61. Redis Dockerfile example
# Redis
# VERSION 0.1
FROM johncosta/redis
MAINTAINER yourName name@example.com
EXPOSE 6379
RUN mkdir /redis
ENTRYPOINT ["/usr/bin/redis-server"]
CMD ["--dir", "/redis"]
58
63. Docker index
• Similar to PyPI but for Docker images
• Public directory to store and download
reusable docker images
• Docker image meta data
• Account required to publish images (free)
• Written in Django
• https://index.docker.io
60
64. Docker registry
• Open source Python Flask app
• https://github.com/dotcloud/docker-registry
• Manages the storage of the images
• Install private registry for private images
61
66. Docker API
• REST based API used to control the
Docker daemon
• live events api feed
• some websocket support
• The Docker CLI uses the same API
• Clients available for most languages
63
74. Want to Learn more?
• Website: http://www.docker.io
• Documentation: http://docs.docker.io
• Github: https://github.com/dotcloud/docker
• IRC: freenode #docker
• Twitter: follow @docker
• Google group: groups.google.com/forum/#!forum/docker-
user
• Meetups: Boston, New York, London, Paris, San Francisco,
and more coming soon. Go to website for details.
71