Django & Docker

Django & Docker

How to be happy with Django & Docker @djangovillage2014



June 13, 2014


  1. Django & Docker How to be happy with Django &

  2. Hi there ! My name is Christian @christianbarra

  3. Quick survey • How many people have heard about docker

    ? • How many people have tried docker ? • How many people are using docker ?
  4. Let’s go !

  5. ! it’s all heavily under construction !

  6. The (big) problem

  7. Deployment sucks !

  8. Our Noah’s ark (from Tokyo Docker Meetup)

  9. What is Docker ?

  10. 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.
  11. Docker is not a VM

  12. 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
  13. 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.
  14. Why use Docker ?

  15. Well…. Docker is: • Lightweight • Minimal resources -> Minimal

    overhead • Fast • Portable • Open Source • Easy
  16. How to install Docker

  17. 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.
  18. $ sudo apt-get update $ sudo apt-get install linux-image- extra-`uname

    -r` --------------------- $ curl -s ubuntu/ | sudo sh ! ! ! Other OS at:
  19. Docker components

  20. 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.
  21. 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.
  22. Docker registry It’s simple the Docker images repository ! It

    can be: • Official: (private and public) • Others (private and public) ! ! docker-registry repository
  23. Now our best friends IMAGE & CONTAINER

  24. 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.
  25. 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.
  26. 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.
  27. 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
  28. None
  29. Docker CLI alias Docker Command Line Interface

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

  31. 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
  32. docker run [OPTIONS] IMAGE[:TAG] [COMMAND] [ARG] Run a command in

    a new container starting from an image
  33. Example #1 docker run

  34. 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 a7cf8ae4e998: Download complete …………………………………………………… 4d26dd3ebc1c: Download complete d4010efcfd86: Download complete ciao # output of our COMMAND
  35. 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)
  36. Example #2 docker run

  37. 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]
  38. docker inspect CONTAINER|IMAGE [CONTAINER|IMAGE] Return information on a container/image

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

  40. docker ps [OPTIONS] List containers

  41. docker build [OPTIONS] PATH | URL | - Build an

    image from a Dockerfile
  42. Docker CLI reference

  43. Dockerfiles alias how to automate building of images

  44. 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
  45. 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
  46. Dockerfile cache Every line in your Dockerfile is chached, if

    you change one line Docker will build your image from that line.
  47. Dockerfile docs reference

  48. What sucks (for me) Manage many containers alias orchestration

  49. None
  50. 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 • - PaaS provider for Docker • - PaaS provider for Docker • Other - A lot of other interesting stuff
  51. Resources to start Learn Docker in 10 min !

    How is different from a normal VM ? different-from-a-normal-virtual-machine ! Can you explain Docker with a practical example/case ? with-a-practical-example-case ! Docker Explained: How To Containerize Python Web Applications to-containerize-python-web-applications ! !
  52. Community ! official web site: irc: #docker on freenode

    google groups: docker-user italian meetup: (?)
  53. THANK YOU ! @christianbarra slide: