docker 1.12 & swarm mode [montreal docker meetup sept. 2016]
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
[email protected]@bargenson