docker service is the new docker run Getting Started with Docker - - PowerPoint PPT Presentation

docker service is the new docker run
SMART_READER_LITE
LIVE PREVIEW

docker service is the new docker run Getting Started with Docker - - PowerPoint PPT Presentation

docker service is the new docker run Getting Started with Docker Clustering Mike Goelzer / mgoelzer@docker.com / @mgoelzer Docker Inc. docker service is the new docker run docker run nginx 2013-14 docker run -p 3375:2375 swarm ; 2014-15


slide-1
SLIDE 1

docker service is the new docker run

Getting Started with Docker Clustering

Mike Goelzer / mgoelzer@docker.com / @mgoelzer Docker Inc.

slide-2
SLIDE 2

docker service is the new docker run

docker run nginx docker run -p 3375:2375 swarm ; docker run -H :3375 nginx

Swarm Mode in Docker Engine

docker swarm init ; docker service create nginx

2013-14 2014-15 2016

slide-3
SLIDE 3

Features Walkthrough

slide-4
SLIDE 4

Engine

Swarm Mode

$ docker swarm init

slide-5
SLIDE 5

Engine

Swarm Mode

$ docker swarm init $ docker swarm join <IP of manager>:2377

Engine

slide-6
SLIDE 6

Engine Engine Engine Engine Engine Engine

Swarm Mode

$ docker swarm init $ docker swarm join <IP of manager>:2377

slide-7
SLIDE 7

Engine Engine Engine Engine Engine Engine

Services

$ docker service create --replicas 3 --name frontend --network mynet

  • p 8080:80 frontend:latest

mynet

slide-8
SLIDE 8

Engine Engine Engine Engine Engine Engine

Services

$ docker service create --replicas 3 --name frontend --network mynet

  • p 8080:80 frontend:latest

$ docker service create --name redis --network mynet redis:latest

mynet

slide-9
SLIDE 9

Engine Engine Engine Engine Engine Engine

Node Failure

$ docker service create --replicas 3 --name frontend --network mynet

  • p 8080:80 frontend:latest

$ docker service create --name redis --network mynet redis:latest

mynet

slide-10
SLIDE 10

Engine Engine Engine Engine Engine Engine

Node Failure

$ docker service create --replicas 3 --name frontend --network mynet

  • p 8080:80 frontend:latest

$ docker service create --name redis --network mynet redis:latest

mynet

slide-11
SLIDE 11

Engine Engine Engine Engine Engine

Desired State ≠ Actual State

$ docker service create --replicas 3 --name frontend --network mynet

  • p 8080:80 frontend:latest

$ docker service create --name redis --network mynet redis:latest

mynet

slide-12
SLIDE 12

Engine Engine Engine Engine Engine

Converge Back to Desired State

$ docker service create --replicas 3 --name frontend --network mynet

  • p 8080:80 frontend:latest

$ docker service create --name redis --network mynet redis:latest

mynet

slide-13
SLIDE 13

Engine Engine Engine Engine Engine

Scaling

$ docker service update --replicas 6 frontend

mynet

slide-14
SLIDE 14

Engine Engine Engine Engine Engine

Scaling

$ docker service update --replicas 10 frontend

mynet

slide-15
SLIDE 15

Engine Engine Engine Engine Engine

Global Services

$ docker service create --mode=global --name prometheus prom/prometheus

mynet

slide-16
SLIDE 16

Engine Engine Engine Engine Engine

Constraints

Engine

docker daemon --label com.example.storage="ssd" docker daemon --label com.example.storage="ssd"

slide-17
SLIDE 17

Engine Engine Engine Engine Engine

Constraints

$ docker service create --replicas 3 --name frontend --network mynet

  • p 8080:80 --constraint engine.labels.com.example.storage==ssd

frontend:latest

Engine

docker daemon --label com.example.storage="ssd" docker daemon --label com.example.storage="ssd"

slide-18
SLIDE 18

Engine Engine Engine Engine Engine

Constraints

$ docker service create --replicas 3 --name frontend --network mynet

  • p 8080:80 --constraint engine.labels.com.example.storage==ssd

frontend:latest $ docker service update --replicas 10 frontend

Engine

docker daemon --label com.example.storage="ssd" docker daemon --label com.example.storage="ssd"

slide-19
SLIDE 19

HEALTHCHECK --interval=5m --timeout=3s

  • -retries 3

CMD curl -f http://localhost/ || exit 1 Check web server every 5 minutes, require < 3 sec latency. >= 3 consecutive failures sets unhealthy state Coming soon: health checks in official images

Container Health Check in Dockerfile

slide-20
SLIDE 20

Routing Mesh

  • Operator reserves a

swarm-wide ingress port (8080) for myapp

  • Every node listens on 8080
  • Container-aware routing mesh

can transparently reroute traffic from Worker3 to a node that is running container

  • Built in load balancing into the

Engine

  • DNS-based service discovery

:8080

User accesses myapp.com:8080

:8080 :8080

frontend frontend

$ docker service create --replicas 3 --name frontend --network mynet

  • p 8080:80 frontend:latest

frontend

slide-21
SLIDE 21

Routing Mesh: Published Ports

  • Operator reserves a

swarm-wide ingress port (8080) for myapp

  • Every node listens on 8080
  • Container-aware routing mesh

can transparently reroute traffic from third node to a node that is running container

  • Built in load balancing into the

Engine

  • DNS-based service discovery

:8080

User accesses myapp.com:8080

:8080 :8080

frontend frontend

$ docker service create --replicas 3 --name frontend --network mynet

  • p 8080:80 frontend_image:latest

frontend

slide-22
SLIDE 22

Secure by default with end-to-end encryption

  • Out-of-the-box TLS

encryption and mutual auth

  • Automatic cert rotation
  • External or self-signed

root CA

  • Cryptographic node

identity

Certificate Authority TLS Certificate Authority TLS Certificate Authority TLS TLS TLS TLS

slide-23
SLIDE 23

Scale: 2,000 Nodes and Counting

  • For now: community testing, crowd-sourced nodes, not funded by

Docker

  • Credit to: Chanwit Kaewkasi, Suranaree University of

Technology (SUT), Thailand

  • Results:

○ 2,384 nodes ○ 96,287 containers ○ Manager CPU/memory ≲15% ○ Test stopped because 3rd-party monitoring failed

  • https://github.com/swarm2k/swarm2k

@chanwit

slide-24
SLIDE 24

Deep Dive: Topology

slide-25
SLIDE 25

Node Node Node Node Node Node

Topology

Node Node Node Node Node Node

slide-26
SLIDE 26

Node Node Node Node Node Node

Topology: roles

Node Node Node Node Node Node

Manager Worker

slide-27
SLIDE 27

Node Node Node Node Node Node

Topology: roles

Node Node Node Node Node Node

Manager Worker

  • Each Node has a role
  • Roles are dynamic
  • Programmable Topology
slide-28
SLIDE 28

Topology: scaling model

Manager Manager Manager Worker Worker Worker Worker Worker Worker

slide-29
SLIDE 29

Topology: High Availability

Manager Manager Manager Worker Worker Worker Worker Worker Worker

Leader Follower Follower

slide-30
SLIDE 30

Topology: High Availability

Manager Manager Manager Worker Worker Worker Worker Worker Worker

Leader Follower Follower

slide-31
SLIDE 31

Topology: High Availability

Manager Manager Manager Worker Worker Worker Worker Worker Worker

Follower Follower Leader

slide-32
SLIDE 32

Topology: High Availability

Manager Manager Manager Worker Worker Worker Worker Worker Worker

Follower Follower Leader

slide-33
SLIDE 33

DEMO

slide-34
SLIDE 34

Victor Vieux vieux@docker.com / @vieux Mike Goelzer mgoelzer@docker.com / @mgoelzer