How to be happy with Django & Docker @djangovillage2014
Django & Docker
How to be happy with Django & Docker
Hi there !
My name is Christian
• How many people have heard about docker ?
• How many people have tried docker ?
• How many people are using docker ?
Let’s go !
it’s all heavily
under construction !
The (big) problem
Deployment sucks !
Our Noah’s ark
(from Tokyo Docker Meetup)
What is Docker ?
Docker is an open-source platform for developing,
shipping, and running applications.
Is fast, lightweight and portable and you can separate
your applications from your infrastructure.
Docker combining a lightweight container virtualization
platform with workflows and tooling that help you
manage and deploy your applications.
Docker is not a VM
The little story
• Dotcloud inc. (PaaS) -> Docker inc.
• Initially written in python -> now in GO
• 1.0 is out !
• Initially based on LinuX Container (LXC) now it uses
How it works
3 main components:
• Docker server daemon
• Docker API/client (CLI - command line interface)
• Docker registry (official, private and public)
The Docker API/client and Docker server
communicate via sockets or through a RESTful API.
Why use Docker ?
Well…. Docker is:
• Minimal resources -> Minimal overhead
• Open Source
How to install Docker
• LXC (not anymore with libcontainer)
• Linux 3.8 or above
Available for : Linux, Mac OS X (with boot2docker),
soon for other Unix OS.
$ sudo apt-get update
$ sudo apt-get install linux-image-
$ curl -s https://get.docker.io/
ubuntu/ | sudo sh
Other OS at:
• The Docker daemon runs on a host machine.
• It can be LOCAL or REMOTE
• He managed CONTAINERS and IMAGE
• The user does not directly interact with the daemon,
but instead through the Docker API/client.
• Is the primary user interface to Docker
• It accepts commands from the user and
communicates back and forth with a Docker
It’s simple the Docker images repository
It can be:
• Official: hub.docker.com (private and public)
• Others (private and public)
Now our best friends
A Docker image is a read-only “template”.
For example, an image could contain an Ubuntu operating
system with Apache, NGINX or your database.
Images are used to create Docker containers.
• build new images
• update existing images
• download Docker images already created.
Docker container 1/2
Docker containers are similar to a directory.
A Docker container holds everything that is needed for an
application to run and can be run, started, stopped, moved,
Each container is an isolated and secure application platform.
A container consists of an operating system, user-added files,
Docker container 2/2
An image tells Docker what the container holds, what
process to run when the container is launched, and a
variety of other configuration data.
When Docker runs a container from an image, it adds
a read-write layer on top of the image (using a union
file system) in which your application can then run.
1.Build/Download your Docker images
2.Create (alias run) your container from those images
3.Share/Save your images on Docker Hub or your
alias Docker Command Line Interface
docker [OPTIONS] COMMAND [arg]
docker.io in ubuntu 14.04
docker run # run a container
docker stop # stop a container
docker rm # remove a container
docker rmi # remove an image
docker inspect # information about container
docker commit # create a new image from the container
docker logs # container’s logs
docker build # build a container from a dockerfile
docker ps # lists the container
docker pull # pull an image from a registry
docker run [OPTIONS]
IMAGE[:TAG] [COMMAND] [ARG]
Run a command in a new container starting from an image
docker run ubuntu echo “ciao”
run a container based on ubuntu image with command echo
root@test:~# docker run ubuntu echo "ciao"
Unable to find image 'ubuntu' locally # looks for ubuntu image
Pulling repository ubuntu # pull ubuntu image from
a7cf8ae4e998: Download complete
4d26dd3ebc1c: Download complete
d4010efcfd86: Download complete
ciao # output of our COMMAND
Some run options
-d # Detached mode (alias background)
-e # Set environment variables
-h # Container host name
-p # Publish a container's port to the host
-v, --volume= #Bind mount a volume
--link #Add link to another container (name:alias)
--volumes-from= #Mount volumes from the specified
-m, --memory=”” #Memory limit
-c #CPU shares (relative weight)
docker run -v /var/log -p 80:80 --name
nginx_c ubuntu touch /var/log/text
-v /var/log # mount dir outside container
-p 80:80 # redirect 80 port of host machine to 80
port of container
--name nginx_c # name this container nginx_c
touch /var/log/text # our COMMAND with [ARG]
docker inspect CONTAINER|IMAGE
Return information on a container/image
docker logs [OPTIONS]
Fetch the logs of a container
docker ps [OPTIONS]
docker build [OPTIONS] PATH |
URL | -
Build an image from a Dockerfile
Docker CLI reference
alias how to automate building of images
This is a Dockerfile
FROM ubuntu:12.04 # sets the base image
RUN apt-get update # run a command
RUN apt-get install -y build-essential git python /
python-dev python-setuptools python-pip
ADD ./ /app # copy files from host machine to images
RUN pip install -r /app/requirements.txt
VOLUME /app # In this way you can see this dir from your host machine
EXPOSE 8080 # Port to expose
CMD ["/usr/local/bin/uwsgi" ,"--ini" ,"/app/conf/uwsgi.ini"] # default command that will
run when container starts
Every RUN is a commit that save the state of the
container into an image
RUN cd /var/log
RUN rm mylogs
is different from
RUN cd /var/log && rm mylogs
Every line in your Dockerfile is chached, if you change
one line Docker will build your image from that line.
What sucks (for me)
Manage many containers
• Dokku - Heroku with Docker
• Orchard - PaaS provider for Docker
• CoreOS - OS for Docker cloud server
• Maestro - Orchestration system for Docker
• Apache Mesos - From the name it seems awesome
• Flynn.io - PaaS provider for Docker
• Deis.io - PaaS provider for Docker
• Other - A lot of other interesting stuff
Resources to start
Learn Docker in 10 min
How is Docker.io different from a normal VM ?
Can you explain Docker with a practical example/case ?
Docker Explained: How To Containerize Python Web Applications
official web site: www.docker.com
irc: #docker on freenode
google groups: docker-user
italian meetup: (?)
THANK YOU !