Dockertaipei 20150528-dockerswarm
-
Upload
wei-ting-kuo -
Category
Software
-
view
123 -
download
0
Transcript of Dockertaipei 20150528-dockerswarm
Docker Swarm
Willy Kuo 2015-05-28
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, …
Scheduling
• Ships with a simple scheduling backend
• Allow swapping in more powerful backends, like Mesos, Kubernetes, for large scale production deployments
Demo
• https://asciinema.org/a/19577
azuredev-node1 azuredev-node2 azuredev-node3
azuredev-maser
docker client
• https://azure.microsoft.com/en-us/documentation/articles/virtual-machines-docker-swarm/
Step1 - create a Swarm clustering
• We need a discovery service
• Here we use the hosted one
• $ docker run --rm swarm create 6856663cdefdec325839a4b7e1de38e8
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
azuredev-node1 azuredev-node2 azuredev-node3
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>
azuredev-node1 azuredev-node2 azuredev-node3
azuredev-maser
Step 4 - Connect to your cluster
• docker -H tcp://<manager_ip:manager_port> info
azuredev-node1 azuredev-node2 azuredev-node3
azuredev-maser
docker client
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
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>
Filters• Constraint
• Affinity
• Port
• Dependency
• Health
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
Standard Constraint
• From docker info - storagedriver- executiondriver- kernelversion- operatingsystem
Affinity Filter
• Containers
• Images
• Expression Syntax
• Port Filter
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
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
Dependency Filter
• Currently, dependencies are declared as follows: - Shared volumes: --volumes-from=dependency - Links: --link=dependency:alias - Shared network stack: --net=container:dependency
Health Fitler
• Prevent scheduling containers on unhealthy nodes
Strategies
• For ranking nodes
• currently supports:- spread - binpack- random