23
Docker Swarm Willy Kuo 2015-05-28

Dockertaipei 20150528-dockerswarm

Embed Size (px)

Citation preview

Page 1: Dockertaipei 20150528-dockerswarm

Docker Swarm

Willy Kuo 2015-05-28

Page 2: Dockertaipei 20150528-dockerswarm

Docker Swarm

• Native clustering for Docker

• Serves the standard Docker API

• Any tool which already communicates with a Docker daemon can use Swarm to transparently scale to multiple host. ex. Compose, Deis, DockerUI, Shipyard, Drone, Jenkins, Docker client, …

Page 3: Dockertaipei 20150528-dockerswarm

Scheduling

• Ships with a simple scheduling backend

• Allow swapping in more powerful backends, like Mesos, Kubernetes, for large scale production deployments

Page 4: Dockertaipei 20150528-dockerswarm

Demo

• https://asciinema.org/a/19577

azuredev-node1 azuredev-node2 azuredev-node3

azuredev-maser

docker client

Page 5: Dockertaipei 20150528-dockerswarm

• https://azure.microsoft.com/en-us/documentation/articles/virtual-machines-docker-swarm/

Page 6: Dockertaipei 20150528-dockerswarm

Step1 - create a Swarm clustering

• We need a discovery service

• Here we use the hosted one

• $ docker run --rm swarm create 6856663cdefdec325839a4b7e1de38e8

Page 7: Dockertaipei 20150528-dockerswarm

Step 2 - Add Nodes

• Connect to each nodes ( azuredev-node1, azuredev-node2, azuredev-node3 )

• Register the Swarm agents to the discovery service

• $ docker run -d swarm join --addr=<node_ip:2375> token://6856663cdefdec325839a4b7e1de38e8

Page 8: Dockertaipei 20150528-dockerswarm

azuredev-node1 azuredev-node2 azuredev-node3

Page 9: Dockertaipei 20150528-dockerswarm

Step 3 - Swarm Manager

• Start the Swarm Manager on any machine ( azuredev-master)

• $ docker run -d -p <swarm_port>:2375 swarm manage token://<cluster_id>

Page 10: Dockertaipei 20150528-dockerswarm

azuredev-node1 azuredev-node2 azuredev-node3

azuredev-maser

Page 11: Dockertaipei 20150528-dockerswarm

Step 4 - Connect to your cluster

• docker -H tcp://<manager_ip:manager_port> info

Page 12: Dockertaipei 20150528-dockerswarm

azuredev-node1 azuredev-node2 azuredev-node3

azuredev-maser

docker client

Page 13: Dockertaipei 20150528-dockerswarm

List nodes in the cluster

• $ docker run --rm swarm list token://6856663cdefdec325839a4b7e1de38e8 172.31.40.100:2375 172.31.40.101:2375 172.31.40.102:2375

Page 14: Dockertaipei 20150528-dockerswarm

More Discovery Service

• https://docs.docker.com/swarm/discovery/

• etcd, consul, zookeeper, static list of ip

• Example (etcd)$ swarm join --addr=<node_ip:2375> etcd://<etcd_ip>/<path>

Page 15: Dockertaipei 20150528-dockerswarm

Filters• Constraint

• Affinity

• Port

• Dependency

• Health

Page 16: Dockertaipei 20150528-dockerswarm

Constraint Filter

• Give the label first $ docker -d --label storage=ssd

• set constraint when run a container $ docker run -d -P -e constraint:storage==ssd --name db mysql

Page 17: Dockertaipei 20150528-dockerswarm

Standard Constraint

• From docker info - storagedriver- executiondriver- kernelversion- operatingsystem

Page 18: Dockertaipei 20150528-dockerswarm

Affinity Filter

• Containers

• Images

• Expression Syntax

• Port Filter

Page 19: Dockertaipei 20150528-dockerswarm

Affinity Filter - Example

• Schedule 2 containers and make the container #2 next to the container #1

• $ docker run -d -p 80:80 --name front nginx 87c4376856a8

• $ docker run -d --name logger -e affinity:container==87c4376856a8 logger

Page 20: Dockertaipei 20150528-dockerswarm

Port Filter

• $ docker run -d -p 80:80 nginx

• Selects a node where the public 80 port is available and schedules a container on it

Page 21: Dockertaipei 20150528-dockerswarm

Dependency Filter

• Currently, dependencies are declared as follows: - Shared volumes: --volumes-from=dependency - Links: --link=dependency:alias - Shared network stack: --net=container:dependency

Page 22: Dockertaipei 20150528-dockerswarm

Health Fitler

• Prevent scheduling containers on unhealthy nodes

Page 23: Dockertaipei 20150528-dockerswarm

Strategies

• For ranking nodes

• currently supports:- spread - binpack- random