docker 1.12 & swarm mode [montreal docker meetup sept. 2016]

Post on 15-Apr-2017

138 Views

Category:

Technology

3 Downloads

Preview:

Click to see full reader

TRANSCRIPT

CleverToday

Docker 1.12 & the new Swarm mode

CleverToday

Agenda• Swarm Mode

• Setup• Overlay Network• Service Discovery• Load Balancing

• Other new features…

CleverToday

Swarm Mode

CleverToday

Basic cluster

Swarm Master

Swarm Node

CleverToday

CleverToday

Create a cluster: Before

$ CLUSTER_ID=`docker run --rm swarm create` $ docker run -t -p <swarm_port>:2375 swarm manage token://$CLUSTER_ID $ docker run -d swarm join --addr=<node_ip:2375> token://$CLUSTER_ID $ docker run --rm swarm list token://$CLUSTER_ID

CleverToday$ docker swarm join --token <token> <manager>:2377

Create a cluster: Now

$ docker swarm init

CleverToday

Create a cluster: Now

$ docker node ls $ docker swarm join-token

CleverToday

Overlay network

Swarm Master

Swarm Node

mynet(overlay network)

| | |

| | |

| | |

| | |

| | |

CleverToday

Overlay network: Before

Swarm Master

Swarm Node

mynet(overlay network)

Key / Value Store

| | |

| | |

| | |

| | |

| | |

CleverToday

Overlay network: Now

$ docker service create --replicas 4 --name web --network mynet --publish 80:80/tcp nginx:latest

mynet(overlay network)

| | |

| | |

| | |

| | |

CleverToday

Overlay network: Now

mynet(overlay network)

| | |

| | |

| | |

| | |

| | |

$ docker service scale web=5

CleverToday

Node Failure: Before

mynet(overlay network)

| | |

| | |

| | |

| | |

| | |

$ docker run -d -e reschedule:on-node-failure redis

CleverToday

Node Failure: Before

mynet(overlay network)

| | |

| | |

| | |

| | |

| | |

$ docker run -d -e reschedule:on-node-failure redis

CleverToday

Node Failure: Now

mynet(overlay network)

| | |

| | |

| | |

| | |

| | |

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

| | |

CleverToday

Node Failure: Nowmynet

| | |

| | | | | |

| | |

Desired State = 6 instances Actual State = 4 instances

Desired State != Actual State

CleverToday

Node Failure: Nowmynet

| | |

| | | | | |

| | |

Desired State = 5 instances Actual State = 4 instances

Desired State != Actual State| | |

| | |

CleverToday

Service Discovery

CleverToday

Service Discovery: Before

CleverToday

Service Discovery: Before

CleverToday

Overlay Network

Service Discovery: Now

DNSweb: 1.1.1.1

nodeapp: 1.1.1.2IPVS

1.1.1.2IPVS

1.1.1.1

10.0.0.1 10.0.0.2 10.0.0.310.0.0.4

$ docker service create --name web --network mynet mynginx:latest $ docker service create --replicas 3 --name nodeapp --network mynet nodeapp:latest

CleverToday

Overlay Network

Service Discovery: Now

DNSweb: 1.1.1.1

nodeapp: 1.1.1.2IPVS

1.1.1.2IPVS

1.1.1.1

nodeapp?

10.0.0.1 10.0.0.2 10.0.0.310.0.0.4

CleverToday

Overlay Network

Service Discovery: Now

DNSweb: 1.1.1.1

nodeapp: 1.1.1.2IPVS

1.1.1.2IPVS

1.1.1.1

10.0.0.1 10.0.0.2 10.0.0.310.0.0.4

CleverToday

Ingress Load-Balancer

mynet

| | |

| | | | | |

| | |

$ docker service create --name web --network mynet --published 80:80/tcp web:latest $ docker service create --replicas 3 --name nodeapp --network mynet nodeapp:latest

:80

CleverToday

Ingress Load-Balancer

mynet

| | |

| | | | | |

| | |

$ docker service create --name web --network mynet --published 80:80/tcp web:latest $ docker service create --replicas 3 --name nodeapp --network mynet nodeapp:latest

:80

CleverToday

Ingress Load-Balancer

mynet

| | |

| | | | | |

| | |

$ docker service create --name web --network mynet --published 80:80/tcp web:latest $ docker service create --replicas 3 --name nodeapp --network mynet nodeapp:latest

:80

CleverToday

Ingress Load-Balancer

mynet

| | |

| | | | | |

| | |

$ docker service create --name web --network mynet --published 80:80/tcp web:latest $ docker service create --replicas 3 --name nodeapp --network mynet nodeapp:latest

:80:80

:80

:80

External LB

CleverToday

Ingress Load-Balancer

mynet

| | | | | |

| | || | |

$ docker service create --name web --network mynet --published 80:80/tcp web:latest $ docker service create --replicas 3 --name nodeapp --network mynet nodeapp:latest

:80:80

:80

CleverToday

Ingress Load-Balancer

| | | | | || | |

$ docker service create --name web --network mynet --published 80:80/tcp web:latest $ docker service create --replicas 3 --name nodeapp --network mynet nodeapp:latest

:80:80

| | |

CleverToday

What else?

CleverToday

Container Health Check• Dockerfile example:

Checks every 5 min that web server can return index page within 3 sec

FROM bargenson/nginx:1.9

COPY nginx.conf /etc/nginx/nginx.conf

HEALTCHECK --interval=5m --timeout=3s --retries 3 CMD curl -f http://localhost || exit 1

CleverToday

Plugins (experimental)

• New plugin command to manage plugins with install, enable, disable, ls, rm, inspect and set subcommands

• New Plugin Permissions Model

CleverToday

Distributed Application Bundle (experimental)• Docker Compose allows you to define a file to configure your application

containers

• Distributed Application Bundles (.dab) define a file to configure your application services stack

• Can be build from the docker-compose.yml used by your development team: $ docker-compose bundle

• To deploy a bundle: $ docker deploy myapp-stack• To manage you stacks: $ docker stack <COMMAND>

CleverToday

For more…

https://github.com/docker/docker/blob/master/CHANGELOG.md

CleverToday

brice@clevertoday.com@bargenson

top related