Slide 1

Slide 1 text

Django & Docker How to be happy with Django & Docker

Slide 2

Slide 2 text

Hi there ! My name is Christian @christianbarra

Slide 3

Slide 3 text

Quick survey • How many people have heard about docker ? • How many people have tried docker ? • How many people are using docker ?

Slide 4

Slide 4 text

Let’s go !

Slide 5

Slide 5 text

! it’s all heavily under construction !

Slide 6

Slide 6 text

The (big) problem

Slide 7

Slide 7 text

Deployment sucks !

Slide 8

Slide 8 text

Our Noah’s ark (from Tokyo Docker Meetup)

Slide 9

Slide 9 text

What is Docker ?

Slide 10

Slide 10 text

Definition 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.

Slide 11

Slide 11 text

Docker is not a VM

Slide 12

Slide 12 text

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 libcontainer

Slide 13

Slide 13 text

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.

Slide 14

Slide 14 text

Why use Docker ?

Slide 15

Slide 15 text

Well…. Docker is: • Lightweight • Minimal resources -> Minimal overhead • Fast • Portable • Open Source • Easy

Slide 16

Slide 16 text

How to install Docker

Slide 17

Slide 17 text

Requirements • 64bit • LXC (not anymore with libcontainer) • AUFS • Linux 3.8 or above ! Available for : Linux, Mac OS X (with boot2docker), soon for other Unix OS.

Slide 18

Slide 18 text

$ sudo apt-get update $ sudo apt-get install linux-image- extra-`uname -r` --------------------- $ curl -s https://get.docker.io/ ubuntu/ | sudo sh ! ! ! Other OS at: http://docs.docker.com/

Slide 19

Slide 19 text

Docker components

Slide 20

Slide 20 text

Docker server • 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.

Slide 21

Slide 21 text

Docker API/client • Is the primary user interface to Docker • It accepts commands from the user and communicates back and forth with a Docker daemon.

Slide 22

Slide 22 text

Docker registry It’s simple the Docker images repository ! It can be: • Official: hub.docker.com (private and public) • Others (private and public) ! ! docker-registry repository https://github.com/dotcloud/docker-registry

Slide 23

Slide 23 text

Now our best friends IMAGE & CONTAINER

Slide 24

Slide 24 text

Docker image 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. ! You can: • build new images • update existing images • download Docker images already created.

Slide 25

Slide 25 text

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, and deleted. ! Each container is an isolated and secure application platform. ! A container consists of an operating system, user-added files, and meta-data.

Slide 26

Slide 26 text

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.

Slide 27

Slide 27 text

Docker flow 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 own repository

Slide 28

Slide 28 text

No content

Slide 29

Slide 29 text

Docker CLI alias Docker Command Line Interface

Slide 30

Slide 30 text

docker [OPTIONS] COMMAND [arg] docker.io in ubuntu 14.04

Slide 31

Slide 31 text

Some commands 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

Slide 32

Slide 32 text

docker run [OPTIONS] IMAGE[:TAG] [COMMAND] [ARG] Run a command in a new container starting from an image

Slide 33

Slide 33 text

Example #1 docker run

Slide 34

Slide 34 text

docker run ubuntu echo “ciao” run a container based on ubuntu image with command echo “ciao” ! root@test:~# docker run ubuntu echo "ciao" Unable to find image 'ubuntu' locally # looks for ubuntu image locally Pulling repository ubuntu # pull ubuntu image from hub.docker.com a7cf8ae4e998: Download complete …………………………………………………… 4d26dd3ebc1c: Download complete d4010efcfd86: Download complete ciao # output of our COMMAND

Slide 35

Slide 35 text

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 container(s) -m, --memory=”” #Memory limit -c #CPU shares (relative weight)

Slide 36

Slide 36 text

Example #2 docker run

Slide 37

Slide 37 text

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]

Slide 38

Slide 38 text

docker inspect CONTAINER|IMAGE [CONTAINER|IMAGE] Return information on a container/image

Slide 39

Slide 39 text

docker logs [OPTIONS] CONTAINER Fetch the logs of a container

Slide 40

Slide 40 text

docker ps [OPTIONS] List containers

Slide 41

Slide 41 text

docker build [OPTIONS] PATH | URL | - Build an image from a Dockerfile

Slide 42

Slide 42 text

Docker CLI reference http://docs.docker.com/reference/commandline/cli/

Slide 43

Slide 43 text

Dockerfiles alias how to automate building of images

Slide 44

Slide 44 text

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

Slide 45

Slide 45 text

But remember…. 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

Slide 46

Slide 46 text

Dockerfile cache Every line in your Dockerfile is chached, if you change one line Docker will build your image from that line.

Slide 47

Slide 47 text

Dockerfile docs reference http://docs.docker.com/reference/builder/

Slide 48

Slide 48 text

What sucks (for me) Manage many containers alias orchestration

Slide 49

Slide 49 text

No content

Slide 50

Slide 50 text

Interesting projects • 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

Slide 51

Slide 51 text

Resources to start Learn Docker in 10 min http://www.docker.com/tryit/ ! How is Docker.io different from a normal VM ? http://stackoverflow.com/questions/16047306/how-is-docker-io- different-from-a-normal-virtual-machine ! Can you explain Docker with a practical example/case ? http://stackoverflow.com/questions/20618828/can-you-explain-docker- with-a-practical-example-case ! Docker Explained: How To Containerize Python Web Applications https://www.digitalocean.com/community/tutorials/docker-explained-how- to-containerize-python-web-applications ! !

Slide 52

Slide 52 text

Community ! official web site: www.docker.com irc: #docker on freenode google groups: docker-user italian meetup: (?)

Slide 53

Slide 53 text

THANK YOU ! @christianbarra www.chrisbarra.me slide: http://goo.gl/BihxmD