Top Banner
Django and Docker: a marriage made in heaven Ken Cochrane DjangoCon US 2013 1
78

Docker at Djangocon 2013 | Talk by Ken Cochrane

Sep 08, 2014

Download

Technology

Docker

Ken Cochrane talk about Docker at Djangocon 2013
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Docker at Djangocon 2013 | Talk by Ken Cochrane

Django and Docker: a marriage made in heaven

Ken CochraneDjangoCon US 2013

1

Page 2: Docker at Djangocon 2013 | Talk by Ken Cochrane

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

Page 3: Docker at Djangocon 2013 | Talk by Ken Cochrane

Outline

• Intro to Docker

• Common use cases

• Demo

• Questions

3

Page 4: Docker at Djangocon 2013 | Talk by Ken Cochrane

Quick survey

4

Page 5: Docker at Djangocon 2013 | Talk by Ken Cochrane

Quick survey

• How many people have heard of Docker before today?

4

Page 6: Docker at Djangocon 2013 | Talk by Ken Cochrane

Quick survey

• How many people have heard of Docker before today?

• How many people have tried Docker?

4

Page 7: Docker at Djangocon 2013 | Talk by Ken Cochrane

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

Page 8: Docker at Djangocon 2013 | Talk by Ken Cochrane

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

Page 9: Docker at Djangocon 2013 | Talk by Ken Cochrane

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

Page 10: Docker at Djangocon 2013 | Talk by Ken Cochrane

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

Page 11: Docker at Djangocon 2013 | Talk by Ken Cochrane

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

Page 12: Docker at Djangocon 2013 | Talk by Ken Cochrane

How does Docker work?

• LinuX Containers (LXC)

• Control Groups & Namespaces

• AUFS

9

Page 13: Docker at Djangocon 2013 | Talk by Ken Cochrane

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

Page 14: Docker at Djangocon 2013 | Talk by Ken Cochrane

Why Containers?

• Speed: Boots in seconds.

• Footprint: 100-1000 containers on one machine. Small disk requirements

11

Page 15: Docker at Djangocon 2013 | Talk by Ken Cochrane

Containers vs. VMs

12

Page 16: Docker at Djangocon 2013 | Talk by Ken Cochrane

Why are Containers lightweight?

13

Page 17: Docker at Djangocon 2013 | Talk by Ken Cochrane

Installing Docker

14

Page 18: Docker at Djangocon 2013 | Talk by Ken Cochrane

Docker Requirements

• Linux Kernel 3.8 or above

• AUFS

• LXC

• 64Bit

15

Page 19: Docker at Djangocon 2013 | Talk by Ken Cochrane

Installations

• Server or Desktop (Vagrant)

• Docker APT repo (get.docker.io)

• Source code compile

• Binary download

• http://docs.docker.io/en/latest/installation/

16

Page 20: Docker at Djangocon 2013 | Talk by Ken Cochrane

Vagrant install

• git clone https://github.com/dotcloud/docker.git

• vagrant up

• vagrant ssh

• sudo docker

17

Page 21: Docker at Djangocon 2013 | Talk by Ken Cochrane

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

Page 22: Docker at Djangocon 2013 | Talk by Ken Cochrane

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

Page 23: Docker at Djangocon 2013 | Talk by Ken Cochrane

Docker on Digital Ocean in 1 step

When creating the Droplet. Select the Docker image under the application

20

Page 24: Docker at Djangocon 2013 | Talk by Ken Cochrane

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

Page 25: Docker at Djangocon 2013 | Talk by Ken Cochrane

Use Cases

22

Page 26: Docker at Djangocon 2013 | Talk by Ken Cochrane

Docker Use Cases

• Local Dev environment

• Deployment

• Unit testing

• parallelize tests

• one db per test

• system tests

23

Page 27: Docker at Djangocon 2013 | Talk by Ken Cochrane

Testing

24

Page 28: Docker at Djangocon 2013 | Talk by Ken Cochrane

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

Page 29: Docker at Djangocon 2013 | Talk by Ken Cochrane

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

Page 30: Docker at Djangocon 2013 | Talk by Ken Cochrane

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

Page 31: Docker at Djangocon 2013 | Talk by Ken Cochrane

Deployment

28

Page 32: Docker at Djangocon 2013 | Talk by Ken Cochrane

Docker Deployment

• dokku

• Flynn.io

• deis.io

• chef, puppet, salt, ansible, etc

29

Page 33: Docker at Djangocon 2013 | Talk by Ken Cochrane

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

Page 34: Docker at Djangocon 2013 | Talk by Ken Cochrane

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

Page 35: Docker at Djangocon 2013 | Talk by Ken Cochrane

deis.io

• Open source written in Python

• Git push deployments

• Docker images, chef recipes or Heroku buildpacks

• Supports scaling and application formation

32

Page 36: Docker at Djangocon 2013 | Talk by Ken Cochrane

Chef

• chef-docker

• docker-cookbook

33

Page 37: Docker at Djangocon 2013 | Talk by Ken Cochrane

Puppet

garethr/docker

34

34

Page 38: Docker at Djangocon 2013 | Talk by Ken Cochrane

Salt stack

• ipmb/salt-minion

• kstaken/salt-test-runner

35

Page 39: Docker at Djangocon 2013 | Talk by Ken Cochrane

Ansible

• cove/docker-ansible

• bryfry/ansible-docker

36

Page 40: Docker at Djangocon 2013 | Talk by Ken Cochrane

Local Development

37

Page 41: Docker at Djangocon 2013 | Talk by Ken Cochrane

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

Page 42: Docker at Djangocon 2013 | Talk by Ken Cochrane

Cool Projects Using Docker

39

Page 43: Docker at Djangocon 2013 | Talk by Ken Cochrane

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

Page 44: Docker at Djangocon 2013 | Talk by Ken Cochrane

npmt.abru.pt

• Autonomously Testing All NPM modules

• One container per module is created then destroyed when test is finished.

• 39496 modules verified

41

Page 45: Docker at Djangocon 2013 | Talk by Ken Cochrane

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

Page 46: Docker at Djangocon 2013 | Talk by Ken Cochrane

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

Page 47: Docker at Djangocon 2013 | Talk by Ken Cochrane

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

Page 48: Docker at Djangocon 2013 | Talk by Ken Cochrane

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

Page 49: Docker at Djangocon 2013 | Talk by Ken Cochrane

openstack-docker

• Deploy lightweight linux containers on Openstack

• https://github.com/dotcloud/openstack-docker

46

Page 50: Docker at Djangocon 2013 | Talk by Ken Cochrane

Using Docker

47

Page 51: Docker at Djangocon 2013 | Talk by Ken Cochrane

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

Page 52: Docker at Djangocon 2013 | Talk by Ken Cochrane

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

Page 53: Docker at Djangocon 2013 | Talk by Ken Cochrane

Docker Basics

50

Page 54: Docker at Djangocon 2013 | Talk by Ken Cochrane

Changes and Updates

51

Page 55: Docker at Djangocon 2013 | Talk by Ken Cochrane

Docker Run• Run command and exit

• $ docker run ubuntu echo “hello world”

• Start interactive shell in container

• $ docker run -i -t ubuntu bash

• Run command in background

• $ docker run -d ubuntu /bin/sh -c “while true; do echo hello world; date; sleep 1; done”

52

Page 56: Docker at Djangocon 2013 | Talk by Ken Cochrane

Dockerfiles

53

Page 57: Docker at Djangocon 2013 | Talk by Ken Cochrane

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

Page 58: Docker at Djangocon 2013 | Talk by Ken Cochrane

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

Page 59: Docker at Djangocon 2013 | Talk by Ken Cochrane

Build image using Dockerfile

# curl image # VERSION 0.1

FROM ubuntu:12.10

MAINTAINER yourName [email protected]

RUN apt-get -qq update

RUN apt-get install -y curl

56

Page 60: Docker at Djangocon 2013 | Talk by Ken Cochrane

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

Page 61: Docker at Djangocon 2013 | Talk by Ken Cochrane

Redis Dockerfile example

# Redis # VERSION 0.1

FROM johncosta/redis MAINTAINER yourName [email protected] EXPOSE 6379 RUN mkdir /redis

ENTRYPOINT ["/usr/bin/redis-server"] CMD ["--dir", "/redis"]

58

Page 62: Docker at Djangocon 2013 | Talk by Ken Cochrane

Docker Index

59

Page 63: Docker at Djangocon 2013 | Talk by Ken Cochrane

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

Page 64: Docker at Djangocon 2013 | Talk by Ken Cochrane

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

Page 65: Docker at Djangocon 2013 | Talk by Ken Cochrane

Docker API

62

Page 66: Docker at Djangocon 2013 | Talk by Ken Cochrane

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

Page 67: Docker at Djangocon 2013 | Talk by Ken Cochrane

Docker clients

• python: docker-py

• ruby: docker-ruby, docker-client, docker-api

• javascript: docker-js, dockerui

• Java: docker-java

64

Page 68: Docker at Djangocon 2013 | Talk by Ken Cochrane

Docker-py import docker # create client docker_client = docker.Client(base_url='unix://var/run/docker.sock', version="1.4") # create container container = docker_client.create_container('ubuntu', None, detach=True) container_id = container.get('Id') # start Container docker_client.start(container_id) # get Ip address meta = docker_client.inspect_container(container_id) ip = meta.get('NetworkSettings').get("IPAddress") # stop container docker_client.stop(container_id)

65

Page 69: Docker at Djangocon 2013 | Talk by Ken Cochrane

Docker UI’s

• Shipyard: Django

• https://github.com/ehazlett/shipyard

• Docker-UI: Angular.js

• https://github.com/crosbymichael/dockerui

• Dockland: Ruby

• https://github.com/dynport/dockland

66

Page 70: Docker at Djangocon 2013 | Talk by Ken Cochrane

Demo

67

Page 71: Docker at Djangocon 2013 | Talk by Ken Cochrane

Coming Soon

68

Page 72: Docker at Djangocon 2013 | Talk by Ken Cochrane

Docker 1.0

• Pluggable architecture

• LXC, Solaris Zones, FreeBSD Zones, etc

• AUFS, BTRFS, etc

• Better OS support (RedHat, etc)

69

Page 73: Docker at Djangocon 2013 | Talk by Ken Cochrane

Docker 1.0 design

70

Page 74: Docker at Djangocon 2013 | Talk by Ken Cochrane

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

Page 75: Docker at Djangocon 2013 | Talk by Ken Cochrane

Docker OpenSpace

• Questions, installation help, etc

• Today (Monday) @ 2-3pm

• Grand suite 5

72

Page 76: Docker at Djangocon 2013 | Talk by Ken Cochrane

Docker Swag

• I have a limited amount of Docker swag to give away.

• T-shirts

• Stickers

• Send me a tweet @KenCochrane if you want one.

73

Page 77: Docker at Djangocon 2013 | Talk by Ken Cochrane

Questions?

74

Page 78: Docker at Djangocon 2013 | Talk by Ken Cochrane

Thank you!

@KenCochrane

75