deploy microservices in containers with docker and friends - kcdc2015

36
Deploy microservices in containers with Docker and friends 1 / 36

Upload: jerome-petazzoni

Post on 03-Aug-2015

3.753 views

Category:

Technology


3 download

TRANSCRIPT

Page 1: Deploy microservices in containers with Docker and friends - KCDC2015

Deploy microservices

in containers

with Docker and friends

1 / 36

Page 2: Deploy microservices in containers with Docker and friends - KCDC2015

Who am I?Jérôme Petazzoni (@jpetazzo)

French software engineer living in California

Joined Docker (dotCloud) more than 4 years ago (I was at Docker before it was cool!)

I have built and scaled the dotCloud PaaS

I learned a few things about running containers (in production)

2 / 36

Page 3: Deploy microservices in containers with Docker and friends - KCDC2015

OutlineWhat are microservices?

What are their challenges?

How does Docker help?

How can we do this today?

3 / 36

Page 4: Deploy microservices in containers with Docker and friends - KCDC2015

What aremicroservices?

4 / 36

Page 5: Deploy microservices in containers with Docker and friends - KCDC2015

Microservices: a style of software architectureBreak big application down into many small services

Example: e-commerce

web front-endcatalog of productsinventory/stock managementshipping calculatorpayment processorbilling/invoicingrecommendation engineuser profiles

5 / 36

Page 6: Deploy microservices in containers with Docker and friends - KCDC2015

Why are we doing this? (1/2)Use different stacks for different services (use the right language/tool for the job)

Replace or refactor individual services easily

Less coordination required when deploying

deploy more often

less risk

more agility and speed

6 / 36

Page 7: Deploy microservices in containers with Docker and friends - KCDC2015

Why are we doing this? (2/2)Promotes many small teams instead of one big army

smaller teams = less communication overhead

see Jeff Bezos' "two-pizza rule"

Enables effective ownership of services

a service always has an "owner" (=team)

the owner is responsible (=on call)

the owner is empowered (=can fix things)

7 / 36

Page 8: Deploy microservices in containers with Docker and friends - KCDC2015

What are thechallenges

associated withmicroservices?

8 / 36

Page 9: Deploy microservices in containers with Docker and friends - KCDC2015

Fast, efficient RPC callsDocker does not help with that. See instead:

ZeroRPCCap'n ProtoXMLRPCSOAPDnodeRESTQueues (like AMQP), for long-running/async operations

9 / 36

Page 10: Deploy microservices in containers with Docker and friends - KCDC2015

Architecturing the application in small blocksDocker does not help with that.

Some tips:

Pretend that you're outsourcing parts of your stack

Wrap database access; each object (or table) = one service

10 / 36

Page 11: Deploy microservices in containers with Docker and friends - KCDC2015

Efficient deployment systemInstead of deploying one monolith once in a while, we deploy many services very frequently

The manual, tedious, uniquely tailored deployment systemhas to be replaced with something simple and reliable

It must be easy to add new components and deploy them

Docker does help with that.

11 / 36

Page 12: Deploy microservices in containers with Docker and friends - KCDC2015

Network plumbingInstead of one monolith talking to a database, we now have 100s of services talking to each other

Those services will often be scaled independently

Instead of direct, deterministic library calls, we now have network calls across load balancers

Scaling, load balancing, monitoring must be easy to do

Docker does help with that.

12 / 36

Page 13: Deploy microservices in containers with Docker and friends - KCDC2015

More challengesSee Microservices: not a free lunch by Benjamin Wootton.

13 / 36

Page 14: Deploy microservices in containers with Docker and friends - KCDC2015

How does Dockerhelp us toimplement

microservices?14 / 36

Page 15: Deploy microservices in containers with Docker and friends - KCDC2015

Building code, without DockerDeployment scripts are fragile

Configuration management is hard (and not a silver bullet)

Environments differ:

from dev to dev

from dev to prod

15 / 36

Page 16: Deploy microservices in containers with Docker and friends - KCDC2015

Building code, with DockerWrite a Dockerfile for each component

Builds are fast

each build step is saved

future builds will reuse saved steps

Builds are reproducible

build environment can be well-defined

outside context is limited

16 / 36

Page 17: Deploy microservices in containers with Docker and friends - KCDC2015

17 / 36

Page 18: Deploy microservices in containers with Docker and friends - KCDC2015

Shipping code, without DockerPush code or build artifacts to servers

Distro packages (deb, rpm...) are great, but hard to build (too generic)

Artifact libraries are great, but tailored to specific languages (too specific)

When deployment fails, rollback isn't guaranteed to work

18 / 36

Page 19: Deploy microservices in containers with Docker and friends - KCDC2015

Shipping code, with DockerContainer images can be pushed to registries

Container engines can pull from those registries

Docker Inc. provides a free registry (the Docker Hub)

Works out of the box in 2 minutes (includes account creation and engine setup)

Can also be deployed on prem

Rollbacks are easy (see: immutable infrastructure with containers)

19 / 36

Page 20: Deploy microservices in containers with Docker and friends - KCDC2015

20 / 36

Page 21: Deploy microservices in containers with Docker and friends - KCDC2015

Network plumbing, without DockerApplication code must be modified to handle:

service discovery (e.g. lookup endpoint addresses into Consul, Etcd, ZK)

failover (same, but also needs to watch for changes)

Development stack becomes either:

very complex (because of those extra components)

different from production (because the code path differs)

21 / 36

Page 22: Deploy microservices in containers with Docker and friends - KCDC2015

Network plumbing, with DockerApplication code doesn't deal with plumbing

Application code connects to services using DNS aliases

DNS aliases are injected by Docker (as entries in /etc/hosts)

In dev, DNS aliases map directly to service containers

In prod, DNS aliases map to special-purpose containers,implementing service discovery, load-balancing, failover

Those containers are called ambassadors

22 / 36

Page 23: Deploy microservices in containers with Docker and friends - KCDC2015

How can we dothis today?

23 / 36

Page 24: Deploy microservices in containers with Docker and friends - KCDC2015

Developing on a single nodeDocker Compose

Describe a stack of containers in a simple YAML file

Start the stack with a single command

Compose connects containers together with links

Also provides simple scaling and log aggregation

24 / 36

Page 25: Deploy microservices in containers with Docker and friends - KCDC2015

25 / 36

Page 26: Deploy microservices in containers with Docker and friends - KCDC2015

Scaling with static resource schedulingDocker Compose + Docker remote API

Deploy stateful services separately

Replace them with ambassadors in the stack

Instantiate the stack multiple times

Fits well with existing IAAS auto-scaling models

26 / 36

Page 27: Deploy microservices in containers with Docker and friends - KCDC2015

27 / 36

Page 28: Deploy microservices in containers with Docker and friends - KCDC2015

Scaling with dynamic resource schedulingDocker Compose + Docker Swarm

Swarm consolidates multiple Docker hosts into a single one

Swarm "looks like" a Docker daemon, but it dispatches(schedules) your containers on multiple daemons

Swarm speaks the Docker API front and back

Swarm is open source and written in Go (like Docker)

Swarm was started by two of the original Docker authors (@aluzzardi and @vieux)

Swarm is not stable yet (version 0.3 right now)

28 / 36

Page 29: Deploy microservices in containers with Docker and friends - KCDC2015

No live demo

Video from DockerCon 2015, Monday earlier this week

(10 minutes)

29 / 36

Page 30: Deploy microservices in containers with Docker and friends - KCDC2015

How do I getstarted?

30 / 36

Page 31: Deploy microservices in containers with Docker and friends - KCDC2015

Installing Docker

31 / 36

Page 32: Deploy microservices in containers with Docker and friends - KCDC2015

Installing DockerThis must be super complicated, right?

32 / 36

Page 33: Deploy microservices in containers with Docker and friends - KCDC2015

Installing DockerThis must be super complicated, right?

Nope!

33 / 36

Page 34: Deploy microservices in containers with Docker and friends - KCDC2015

Installing DockerThis must be super complicated, right?

Nope!

Docker Machine makes it super easy to setup Docker Machines (duh!)

34 / 36

Page 35: Deploy microservices in containers with Docker and friends - KCDC2015

35 / 36

Page 36: Deploy microservices in containers with Docker and friends - KCDC2015

Thanks! Questions?

@jpetazzo @docker

36 / 36