Dockertaipei 20150528-dockerswarm
-
Upload
wei-ting-kuo -
Category
Software
-
view
123 -
download
0
Transcript of Dockertaipei 20150528-dockerswarm
![Page 1: Dockertaipei 20150528-dockerswarm](https://reader030.fdocuments.in/reader030/viewer/2022032618/55b6e482bb61eb5a268b48b7/html5/thumbnails/1.jpg)
Docker Swarm
Willy Kuo 2015-05-28
![Page 2: Dockertaipei 20150528-dockerswarm](https://reader030.fdocuments.in/reader030/viewer/2022032618/55b6e482bb61eb5a268b48b7/html5/thumbnails/2.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022032618/55b6e482bb61eb5a268b48b7/html5/thumbnails/3.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022032618/55b6e482bb61eb5a268b48b7/html5/thumbnails/4.jpg)
Demo
• https://asciinema.org/a/19577
azuredev-node1 azuredev-node2 azuredev-node3
azuredev-maser
docker client
![Page 5: Dockertaipei 20150528-dockerswarm](https://reader030.fdocuments.in/reader030/viewer/2022032618/55b6e482bb61eb5a268b48b7/html5/thumbnails/5.jpg)
• https://azure.microsoft.com/en-us/documentation/articles/virtual-machines-docker-swarm/
![Page 6: Dockertaipei 20150528-dockerswarm](https://reader030.fdocuments.in/reader030/viewer/2022032618/55b6e482bb61eb5a268b48b7/html5/thumbnails/6.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022032618/55b6e482bb61eb5a268b48b7/html5/thumbnails/7.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022032618/55b6e482bb61eb5a268b48b7/html5/thumbnails/8.jpg)
azuredev-node1 azuredev-node2 azuredev-node3
![Page 9: Dockertaipei 20150528-dockerswarm](https://reader030.fdocuments.in/reader030/viewer/2022032618/55b6e482bb61eb5a268b48b7/html5/thumbnails/9.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022032618/55b6e482bb61eb5a268b48b7/html5/thumbnails/10.jpg)
azuredev-node1 azuredev-node2 azuredev-node3
azuredev-maser
![Page 11: Dockertaipei 20150528-dockerswarm](https://reader030.fdocuments.in/reader030/viewer/2022032618/55b6e482bb61eb5a268b48b7/html5/thumbnails/11.jpg)
Step 4 - Connect to your cluster
• docker -H tcp://<manager_ip:manager_port> info
![Page 12: Dockertaipei 20150528-dockerswarm](https://reader030.fdocuments.in/reader030/viewer/2022032618/55b6e482bb61eb5a268b48b7/html5/thumbnails/12.jpg)
azuredev-node1 azuredev-node2 azuredev-node3
azuredev-maser
docker client
![Page 13: Dockertaipei 20150528-dockerswarm](https://reader030.fdocuments.in/reader030/viewer/2022032618/55b6e482bb61eb5a268b48b7/html5/thumbnails/13.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022032618/55b6e482bb61eb5a268b48b7/html5/thumbnails/14.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022032618/55b6e482bb61eb5a268b48b7/html5/thumbnails/15.jpg)
Filters• Constraint
• Affinity
• Port
• Dependency
• Health
![Page 16: Dockertaipei 20150528-dockerswarm](https://reader030.fdocuments.in/reader030/viewer/2022032618/55b6e482bb61eb5a268b48b7/html5/thumbnails/16.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022032618/55b6e482bb61eb5a268b48b7/html5/thumbnails/17.jpg)
Standard Constraint
• From docker info - storagedriver- executiondriver- kernelversion- operatingsystem
![Page 18: Dockertaipei 20150528-dockerswarm](https://reader030.fdocuments.in/reader030/viewer/2022032618/55b6e482bb61eb5a268b48b7/html5/thumbnails/18.jpg)
Affinity Filter
• Containers
• Images
• Expression Syntax
• Port Filter
![Page 19: Dockertaipei 20150528-dockerswarm](https://reader030.fdocuments.in/reader030/viewer/2022032618/55b6e482bb61eb5a268b48b7/html5/thumbnails/19.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022032618/55b6e482bb61eb5a268b48b7/html5/thumbnails/20.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022032618/55b6e482bb61eb5a268b48b7/html5/thumbnails/21.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022032618/55b6e482bb61eb5a268b48b7/html5/thumbnails/22.jpg)
Health Fitler
• Prevent scheduling containers on unhealthy nodes
![Page 23: Dockertaipei 20150528-dockerswarm](https://reader030.fdocuments.in/reader030/viewer/2022032618/55b6e482bb61eb5a268b48b7/html5/thumbnails/23.jpg)
Strategies
• For ranking nodes
• currently supports:- spread - binpack- random