Docker 1.12 & Swarm Mode [Montreal Docker Meetup Sept. 2016]

35
CleverToday Docker 1.12 & the new Swarm mode

Transcript of Docker 1.12 & Swarm Mode [Montreal Docker Meetup Sept. 2016]

Page 1: Docker 1.12 & Swarm Mode [Montreal Docker Meetup Sept. 2016]

CleverToday

Docker 1.12 & the new Swarm mode

Page 2: Docker 1.12 & Swarm Mode [Montreal Docker Meetup Sept. 2016]

CleverToday

Agenda• Swarm Mode

• Setup• Overlay Network• Service Discovery• Load Balancing

• Other new features…

Page 3: Docker 1.12 & Swarm Mode [Montreal Docker Meetup Sept. 2016]

CleverToday

Swarm Mode

Page 4: Docker 1.12 & Swarm Mode [Montreal Docker Meetup Sept. 2016]

CleverToday

Basic cluster

Swarm Master

Swarm Node

Page 5: Docker 1.12 & Swarm Mode [Montreal Docker Meetup Sept. 2016]

CleverToday

Page 6: Docker 1.12 & Swarm Mode [Montreal Docker Meetup Sept. 2016]

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

Page 7: Docker 1.12 & Swarm Mode [Montreal Docker Meetup Sept. 2016]

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

Create a cluster: Now

$ docker swarm init

Page 8: Docker 1.12 & Swarm Mode [Montreal Docker Meetup Sept. 2016]

CleverToday

Create a cluster: Now

$ docker node ls $ docker swarm join-token

Page 9: Docker 1.12 & Swarm Mode [Montreal Docker Meetup Sept. 2016]

CleverToday

Overlay network

Swarm Master

Swarm Node

mynet(overlay network)

| | |

| | |

| | |

| | |

| | |

Page 10: Docker 1.12 & Swarm Mode [Montreal Docker Meetup Sept. 2016]

CleverToday

Overlay network: Before

Swarm Master

Swarm Node

mynet(overlay network)

Key / Value Store

| | |

| | |

| | |

| | |

| | |

Page 11: Docker 1.12 & Swarm Mode [Montreal Docker Meetup Sept. 2016]

CleverToday

Overlay network: Now

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

mynet(overlay network)

| | |

| | |

| | |

| | |

Page 12: Docker 1.12 & Swarm Mode [Montreal Docker Meetup Sept. 2016]

CleverToday

Overlay network: Now

mynet(overlay network)

| | |

| | |

| | |

| | |

| | |

$ docker service scale web=5

Page 13: Docker 1.12 & Swarm Mode [Montreal Docker Meetup Sept. 2016]

CleverToday

Node Failure: Before

mynet(overlay network)

| | |

| | |

| | |

| | |

| | |

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

Page 14: Docker 1.12 & Swarm Mode [Montreal Docker Meetup Sept. 2016]

CleverToday

Node Failure: Before

mynet(overlay network)

| | |

| | |

| | |

| | |

| | |

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

Page 15: Docker 1.12 & Swarm Mode [Montreal Docker Meetup Sept. 2016]

CleverToday

Node Failure: Now

mynet(overlay network)

| | |

| | |

| | |

| | |

| | |

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

| | |

Page 16: Docker 1.12 & Swarm Mode [Montreal Docker Meetup Sept. 2016]

CleverToday

Node Failure: Nowmynet

| | |

| | | | | |

| | |

Desired State = 6 instances Actual State = 4 instances

Desired State != Actual State

Page 17: Docker 1.12 & Swarm Mode [Montreal Docker Meetup Sept. 2016]

CleverToday

Node Failure: Nowmynet

| | |

| | | | | |

| | |

Desired State = 5 instances Actual State = 4 instances

Desired State != Actual State| | |

| | |

Page 18: Docker 1.12 & Swarm Mode [Montreal Docker Meetup Sept. 2016]

CleverToday

Service Discovery

Page 19: Docker 1.12 & Swarm Mode [Montreal Docker Meetup Sept. 2016]

CleverToday

Service Discovery: Before

Page 20: Docker 1.12 & Swarm Mode [Montreal Docker Meetup Sept. 2016]

CleverToday

Service Discovery: Before

Page 21: Docker 1.12 & Swarm Mode [Montreal Docker Meetup Sept. 2016]

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

Page 22: Docker 1.12 & Swarm Mode [Montreal Docker Meetup Sept. 2016]

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

Page 23: Docker 1.12 & Swarm Mode [Montreal Docker Meetup Sept. 2016]

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

Page 24: Docker 1.12 & Swarm Mode [Montreal Docker Meetup Sept. 2016]

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

Page 25: Docker 1.12 & Swarm Mode [Montreal Docker Meetup Sept. 2016]

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

Page 26: Docker 1.12 & Swarm Mode [Montreal Docker Meetup Sept. 2016]

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

Page 27: Docker 1.12 & Swarm Mode [Montreal Docker Meetup Sept. 2016]

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

Page 28: Docker 1.12 & Swarm Mode [Montreal Docker Meetup Sept. 2016]

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

Page 29: Docker 1.12 & Swarm Mode [Montreal Docker Meetup Sept. 2016]

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

| | |

Page 30: Docker 1.12 & Swarm Mode [Montreal Docker Meetup Sept. 2016]

CleverToday

What else?

Page 31: Docker 1.12 & Swarm Mode [Montreal Docker Meetup Sept. 2016]

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

Page 32: Docker 1.12 & Swarm Mode [Montreal Docker Meetup Sept. 2016]

CleverToday

Plugins (experimental)

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

• New Plugin Permissions Model

Page 33: Docker 1.12 & Swarm Mode [Montreal Docker Meetup Sept. 2016]

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>

Page 34: Docker 1.12 & Swarm Mode [Montreal Docker Meetup Sept. 2016]

CleverToday

For more…

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

Page 35: Docker 1.12 & Swarm Mode [Montreal Docker Meetup Sept. 2016]

CleverToday

[email protected]@bargenson