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

Docker at Djangocon 2013 | Talk by Ken Cochrane

  • Upload
    docker

  • View
    13.369

  • Download
    0

Embed Size (px)

DESCRIPTION

Ken Cochrane talk about Docker at Djangocon 2013

Citation preview

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