Introduction to Docker, December 2014 "Tour de France" Edition

60
#dockertour

Transcript of Introduction to Docker, December 2014 "Tour de France" Edition

Page 1: Introduction to Docker, December 2014 "Tour de France" Edition

#dockertour

Page 2: Introduction to Docker, December 2014 "Tour de France" Edition

Docker

December 2014—Docker 1.3

Page 3: Introduction to Docker, December 2014 "Tour de France" Edition

@jpetazzo

● Wrote dotCloud PAAS deployment tools

– EC2, LXC, Puppet, Python, Shell, ØMQ...● Docker contributor

– Security, Networking...● Runs all kinds of crazy things in Docker

– Docker-in-Docker, VPN-in-Docker,KVM-in-Docker, Xorg-in-Docker...

Page 4: Introduction to Docker, December 2014 "Tour de France" Edition

Agenda

● What is Docker and Why it matters● What are containers● The Docker ecosystem (Engine, Hub, etc.)● How to get started with Docker

Page 5: Introduction to Docker, December 2014 "Tour de France" Edition

Whatis Docker

Whyit matters

Page 6: Introduction to Docker, December 2014 "Tour de France" Edition

Deploy everything

● Webapps● Backends● SQL, NoSQL● Big data● Message queues● … and more

Page 7: Introduction to Docker, December 2014 "Tour de France" Edition

Deploy almost everywhere

● Linux servers● VMs or bare metal● Any distro● Kernel 3.8+ (or RHEL 2.6.32)

Currently: focus on x86_64.

(But people reported success on arm.)

Page 8: Introduction to Docker, December 2014 "Tour de France" Edition

Deploy almost* everywhere

Page 9: Introduction to Docker, December 2014 "Tour de France" Edition

Deploy reliably & consistently

Page 10: Introduction to Docker, December 2014 "Tour de France" Edition
Page 11: Introduction to Docker, December 2014 "Tour de France" Edition

Deploy reliably & consistently

● If it works locally, it will work on the server● With exactly the same behavior● Regardless of versions● Regardless of distros● Regardless of dependencies

Page 12: Introduction to Docker, December 2014 "Tour de France" Edition

Deploy efficiently

● Containers are lightweight– Typical laptop runs 10-100 containers easily

– Typical server can run 100-1000 containers

● Containers can run at native speeds– Lies, damn lies, and other benchmarks:

http://qiita.com/syoyo/items/bea48de8d7c6d8c73435http://www.slideshare.net/BodenRussell/kvm-and-docker-lxc-benchmarking-with-openstack

Page 14: Introduction to Docker, December 2014 "Tour de France" Edition

Booting 15 OpenStack VMs:KVM vs Docker

Page 15: Introduction to Docker, December 2014 "Tour de France" Edition

Memory speed:Bare Metal vs Docker vs KVM

Page 16: Introduction to Docker, December 2014 "Tour de France" Edition

Is there really no overhead at all?

● Processes are isolated,but run straight on the host

● Code path in containers= code path on native

● CPU performance = native performance

● Memory performance = a few % shaved off for (optional) accounting

● Network and disk I/O performance = small overhead; can be reduced to zero

Page 17: Introduction to Docker, December 2014 "Tour de France" Edition

Should we get rid of

Virtual Machines?

Page 18: Introduction to Docker, December 2014 "Tour de France" Edition

No

Page 19: Introduction to Docker, December 2014 "Tour de France" Edition

NoNot yet

Page 20: Introduction to Docker, December 2014 "Tour de France" Edition

OK, but what is

Docker?

Page 21: Introduction to Docker, December 2014 "Tour de France" Edition

Docker Engine+ Docker Hub

= Docker Platform

Page 22: Introduction to Docker, December 2014 "Tour de France" Edition

The Docker Engine runs containers.

Page 23: Introduction to Docker, December 2014 "Tour de France" Edition

OK, but what is a

container?

Page 24: Introduction to Docker, December 2014 "Tour de France" Edition

High level approach:it's a lightweight VM

● Own process space● Own network interface● Can run stuff as root● Can have its own /sbin/init

(different from the host)

« Machine Container »

Page 25: Introduction to Docker, December 2014 "Tour de France" Edition

Low level approach:it's chroot on steroids

● Can also not have its own /sbin/init● Container = isolated process(es)● Share kernel with host● No device emulation (neither HVM nor PV)

« Application Container »

Page 26: Introduction to Docker, December 2014 "Tour de France" Edition

Stop.Demo time.

Page 27: Introduction to Docker, December 2014 "Tour de France" Edition
Page 28: Introduction to Docker, December 2014 "Tour de France" Edition

How does it work?Isolation with namespaces

● pid● mnt● net● uts● ipc● user

Page 29: Introduction to Docker, December 2014 "Tour de France" Edition

How does it work?Isolation with cgroups

● memory● cpu● blkio● devices

Page 30: Introduction to Docker, December 2014 "Tour de France" Edition

Alright, I get this.Containers = nimble Vms.

Let's just tell the CFO,and get back to work!

Page 31: Introduction to Docker, December 2014 "Tour de France" Edition
Page 32: Introduction to Docker, December 2014 "Tour de France" Edition

What happens when something becomes

10-100x cheaper?

Page 33: Introduction to Docker, December 2014 "Tour de France" Edition

Random example:testing

● Project X has 100 unit tests● Each test needs a pristine SQL database

Page 34: Introduction to Docker, December 2014 "Tour de France" Edition

Random example:testing

● Project X has 100 unit tests● Each test needs a pristine SQL database

● Plan A: spin up 1 database, clean after each use– If we don't clean correctly, random tests will fail

– Cleaning correctly can be expensive (e.g. reload DB)

Page 35: Introduction to Docker, December 2014 "Tour de France" Edition

Random example:testing

● Project X has 100 unit tests● Each test needs a pristine SQL database

● Plan B: spin up 100 databases– … in parallel: needs too much resources

– … one after the other: takes too long

Page 36: Introduction to Docker, December 2014 "Tour de France" Edition

Random example:testing

● Project X has 100 unit tests● Each test needs a pristine SQL database

● Plan C: spin up 100 databases in containers– fast, efficient (no overhead, copy-on-write)

– easy to implement without virtualization black belt

Page 37: Introduction to Docker, December 2014 "Tour de France" Edition
Page 38: Introduction to Docker, December 2014 "Tour de France" Edition

Containers make testing(and many other things)

way easier

Page 39: Introduction to Docker, December 2014 "Tour de France" Edition

Docker's Entourage

Page 40: Introduction to Docker, December 2014 "Tour de France" Edition

Docker: the cast

● Docker Engine● Docker Hub● Docker, the community● Docker Inc, the company

Page 41: Introduction to Docker, December 2014 "Tour de France" Edition

Docker Engine

● Open Source engine to commoditize LXC● Uses copy-on-write for quick provisioning● Written in Go, runs as a daemon, comes with a CLI● Everything exposed through a REST API● Allows to build images in standard, reproducible way● Allows to share images through registries● Defines standard format for containers

(stack of layers; 1 layer = tarball+metadata)

Page 42: Introduction to Docker, December 2014 "Tour de France" Edition

… Open Source?

● Nothing up the sleeve, everything on the table– Public GitHub repository: https://github.com/docker/docker

– Bug reports: GitHub issue tracker

– Mailing lists: docker-user, docker-dev (Google groups)

– IRC channels: #docker, #docker-dev (Freenode)

– New features: GitHub pull requests (see CONTRIBUTING.md)

– Docker Governance Advisory Board (elected by contributors)

Page 43: Introduction to Docker, December 2014 "Tour de France" Edition

Docker Hub

Collection of services to make Docker more useful.● Public registry

(push/pull your images for free)● Private registry

(push/pull secret images for $)● Automated builds

(link github/bitbucket repo; trigger build on commit)● More to come!

Page 44: Introduction to Docker, December 2014 "Tour de France" Edition

Docker, the community

● >700 contributors● ~20 core maintainers● >40,000 Dockerized projects on GitHub● >60,000 repositories on Docker Hub● >25000 meetup members,

>140 cities, >50 countries● >2,000,000 downloads of boot2docker

Page 45: Introduction to Docker, December 2014 "Tour de France" Edition

Docker Inc, the company

● Headcount: ~70● Led by Open Source veteran Ben Golub

(GlusterFS)● Revenue:

– t-shirts and stickers featuring the cool blue whale

– SAAS delivered through Docker Hub

– Support & Training

Page 46: Introduction to Docker, December 2014 "Tour de France" Edition

First steps with Docker

Page 47: Introduction to Docker, December 2014 "Tour de France" Edition

One-time setup

● On your dev env (Linux, OS X, Windows)– boot2docker (25 MB VM image)

– Natively (if you run Linux)

● On your servers (Linux)– Packages (Ubuntu, Debian, Fedora, Gentoo, Arch...)

– Single binary install (Golang FTW!)

– Easy provisioning on Azure, Rackspace, Digital Ocean...

– Special distros: CoreOS, Project Atomic

Page 48: Introduction to Docker, December 2014 "Tour de France" Edition

Authoring imageswith a Dockerfile

Page 49: Introduction to Docker, December 2014 "Tour de France" Edition

FROM ubuntu:14.04

RUN apt-get updateRUN apt-get install -y nginxRUN echo 'Hi, I am in your container!' \ >/usr/share/nginx/html/index.html

CMD nginx -g "daemon off;"

EXPOSE 80

docker build -t jpetazzo/staticweb .docker run -P jpetazzo/staticweb

Page 50: Introduction to Docker, December 2014 "Tour de France" Edition
Page 51: Introduction to Docker, December 2014 "Tour de France" Edition

FROM ubuntu:12.04

RUN apt-get -y updateRUN apt-get install -y g++RUN apt-get install -y erlang-dev erlang-base-hipe ...RUN apt-get install -y libmozjs185-dev libicu-dev libtool ...RUN apt-get install -y make wget

RUN wget http://.../apache-couchdb-1.3.1.tar.gz \ | tar -C /tmp -zxf-RUN cd /tmp/apache-couchdb-* && ./configure && make install

RUN printf "[httpd]\nport = 8101\nbind_address = 0.0.0.0" \ > /usr/local/etc/couchdb/local.d/docker.ini

EXPOSE 8101CMD ["/usr/local/bin/couchdb"]

docker build -t jpetazzo/couchdb .

Page 52: Introduction to Docker, December 2014 "Tour de France" Edition

FROM debian:jessie

RUN apt-get -y updateRUN apt-get install -y python-pip

RUN mkdir /srcWORKDIR /src

ADD requirements.txt /srcRUN pip install -r requirements.txt

ADD . /srcRUN python setup.py install

Page 53: Introduction to Docker, December 2014 "Tour de France" Edition

Runningmultiple

containers

Page 54: Introduction to Docker, December 2014 "Tour de France" Edition
Page 55: Introduction to Docker, December 2014 "Tour de France" Edition

Fig

● Run your stack with one command: fig up● Describe your stack with one file: fig.yml● Example: run a (one node) Mesos cluster

– Mesos master

– Mesos slave

– Volt framework

Page 56: Introduction to Docker, December 2014 "Tour de France" Edition

master: image: redjack/mesos-master command: mesos-master --work_dir=/mesos ports: - 5050:5050

slave: image: redjack/mesos-slave links: - master:master command: mesos-slave --master=master:5050 --containerizers=docker,mesos volumes: - /sys/fs/cgroup:/sys/fs/cgroup - /var/run/docker.sock:/var/run/docker.sock - /usr/bin/docker:/bin/docker

volt: image: volt/volt links: - master:master command: --master=master:5050 ports: - 8080:8080

Page 57: Introduction to Docker, December 2014 "Tour de France" Edition

Do you evenChef?

Puppet?Ansible?

Salt?

Page 58: Introduction to Docker, December 2014 "Tour de France" Edition
Page 59: Introduction to Docker, December 2014 "Tour de France" Edition

Summary

With Docker, I can:● put my software in containers● run those containers anywhere● write recipes to automatically build containers● use Fig to effortlessly start stacks of containers

Page 60: Introduction to Docker, December 2014 "Tour de France" Edition

Thank you! Questions?

http://docker.com/

@docker

@jpetazzo

#dockertour