Slide 1

Slide 1 text

Anil Wadghule [email protected] February 2014 — Docker 0.8.0

Slide 2

Slide 2 text

Docker • Docker was started by Solomon Hykes as an internal project by dotCloud • Docker makes Linux Containers easy to use

Slide 3

Slide 3 text

What is Docker? “Docker is an open source engine to easily create lightweight, portable, self-sufficient containers from any application. The same container that a developer builds and tests on a laptop can run at scale, in production, on VMs, bare metal, OpenStack clusters, public clouds and more” - http://docker.io

Slide 4

Slide 4 text

Why Docker? • Deploy everything (webapps, backends, sql, big data, message queues) • Deploy almost everywhere (Linux servers, VMs or bare metal, any distro, Kernel 3.8) • Deploy reliably & consistently (local and on server same) • Deploy easily • Deploy at scale

Slide 5

Slide 5 text

Docker popularity • 330+ Contributors, • 50,000+ docker index pull, • 1000’s of Dockerized applications • Integration in Jenkins, Travis, Chef, Puppet, Vagrant & OpenStack

Slide 6

Slide 6 text

The challenge • Static website, User DB, Queue, Background workers, Analytics DB, API endpoint, Web Frontend • Development VM, QA Server, Public cloud, Production Servers, Customer data center, Production cluster • Running apps in multiple environments results in N x N nightmare

Slide 7

Slide 7 text

N x N compatibility nightmare Problem: shipping code

Slide 8

Slide 8 text

Solution • The Linux Container

Slide 9

Slide 9 text

This eliminated the N x N problem

Slide 10

Slide 10 text

What is LXC? • Lightweight Linux Container (LXC) • Operating system level virtualisation method for running multiple isolated Linux systems • Provides way to run mini Linux systems within another Linux systems • http://en.wikipedia.org/wiki/LXC

Slide 11

Slide 11 text

LXC • I can SSH into it • I have root access • I can apt-get/yum install packages • Speed: boots in seconds • Footprint: 100-1000 containers on one machine. Small disk requirements.

Slide 12

Slide 12 text

Control groups & namespaces • LXCs makes use of control groups & namespaces • Linux kernel feature to limit, account and isolate resource usage, such as 
 — CPU 
 — Memory 
 — Disk I/O

Slide 13

Slide 13 text

Docker • Docker is API on top of LXC • Docker runs as daemon • Docker makes Linux Containers easy to use (LXC) • Docker service exposes REST api that is used by Docker client

Slide 14

Slide 14 text

Docker architecture DOCKER LAYER FS LXC CGROUPS LINUX KERNEL NAMESPACES

Slide 15

Slide 15 text

Container vs. VMs

Slide 16

Slide 16 text

Docker operating system? • Doesn’t include operating system • Relies on operating system functionality provided by underlying infrastructure

Slide 17

Slide 17 text

Requirements • Linux kernel 3.8 & above • AUFS • LXC • 64-bit

Slide 18

Slide 18 text

Installation • Can be directly installed on supported Linux distros. • Supported Ubuntu versions
 
 Ubuntu Precise 12.04 (LTS) (64-bit) 
 Ubuntu Raring 13.04 and Saucy 13.10 (64 bit)

Slide 19

Slide 19 text

Installation: boot2docker • On Mac
 
 $ brew install boot2docker
 $ boot2docker init
 $ boot2docker up
 $ export DOCKER_HOST=tcp://
 $ docker run -i -t busybox sh
 #/

Slide 20

Slide 20 text

Installation: Vagrant • Clone the docker repository 
 $ git clone https://github.com/dotcloud/docker.git • Startup the vagrant image 
 $ vagrant up • SSH into the image 
 $ vagrant ssh • Use docker in VM
 $ docker • Vagrant client works on Mac

Slide 21

Slide 21 text

Demo

Slide 22

Slide 22 text

• Downloaded the image from docker repo • Generated a new LXC container • Created a new file system • Mounted a read/write layer • Allocated network interface • Setup IP Setup NATing • Executed the bash shell in the container • ** All under a very few minutes What Docker has done?

Slide 23

Slide 23 text

Advantages • Elegant application delivery • Throwable sandboxes • Create uniform development & production environments • Automated testing and continuous integration/deployments • Deploying and scaling web apps, databases and backend services

Slide 24

Slide 24 text

Why developers care? • Build once, write everywhere • Clean, safe, hygienic and portable runtime environment for app • No worries about missing dependencies during subsequent deployments • Reduce / eliminate compatibility concerns on different platforms

Slide 25

Slide 25 text

Recommended workflow • Each service will be in its own container(s) • Build an image for each service • Pin dependencies (packages etc.) accurately. • Link services together

Slide 26

Slide 26 text

Questions

Slide 27

Slide 27 text

Thank you !!! Follow me on Twitter @anildigital