From a3ca1786218d66dced482dede1b4b095913435e8 Mon Sep 17 00:00:00 2001 From: rio-2607 Date: Wed, 20 May 2015 21:56:41 +0800 Subject: [PATCH] Update usage.md --- swarm/usage.md | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/swarm/usage.md b/swarm/usage.md index c2bb31d..76c58ee 100644 --- a/swarm/usage.md +++ b/swarm/usage.md @@ -212,3 +212,49 @@ CONTAINER ID IMAGE COMMAND CREATED 18ceefa5e86f redis:latest /entrypoint.sh redis 25 minutes ago Up 22 seconds 192.168.1.83:32771->6379/tcp 083/node-1 可以看到,所有的container都是分布在同一个节点上运行的。 + +##Swarm Filters +swarm的调度器(scheduler)在选择节点运行containers的时候支持几种过滤器 (filter):Constraint,Affinity,Port,Dependency,Health +这些选项可以在执行swarm manage命令的时候通过--filter选项来设置。 +###Constraint Filter +constraint 是一个跟具体节点相关联的键值对,可以看做是每个节点的标签,这个标签可以在启动docker daemon的时候指定,比如 +

+sudo docker -d --label label_name=label01
+
+也可以写在docker的配置文件里面,在ubuntu上面是/etc/default/docker +在本次试验中,给083添加标签--label label_name=083,084添加标签--label label_name=084,124添加标签--label label_name=084, +以083为例,打开/etc/default/docker文件,修改DOCKER_OPTS: +

+DOCKER_OPTS="-H 0.0.0.0:2375 -H unix:///var/run/docker.sock  --label label_name=083"
+
+在使用docker run命令启动container的时候使用 -e constarint:key=value的形式,可以指定container运行的节点,比如我们想在84上面启动一个redis container, +

+rio085:~$ sudo docker -H 192.168.1.83:2376 run --name redis_1 -d -e constraint:label_name==084 redis
+fee1b7b9dde13d64690344c1f1a4c3f5556835be46b41b969e4090a083a6382d
+
+主要,是**两个**等号,不是一个等号,这一点会经常被忽略。 +接下来再在084这台机器上启动一个redis container +

+rio085:~$ sudo docker -H 192.168.1.83:2376 run --name redis_2 -d -e constraint:label_name==084 redis         4968d617d9cd122fc2e17b3bad2f2c3b5812c0f6f51898024a96c4839fa000e1
+
+然后再在083这台机器上启动另外一个redis container +

+rio085:~$ sudo docker -H 192.168.1.83:2376 run --name redis_3 -d -e constraint:label_name==083 redis         7786300b8d2232c2335ac6161c715de23f9179d30eb5c7e9c4f920a4f1d39570
+
+现在来看下执行情况: +

+rio085:~$ sudo docker -H 192.168.1.83:2376 ps
+CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS              PORTS               NAMES
+7786300b8d22        redis:latest        "/entrypoint.sh redi   15 minutes ago      Up 53 seconds       6379/tcp            083/redis_3
+4968d617d9cd        redis:latest        "/entrypoint.sh redi   16 minutes ago      Up 2 minutes        6379/tcp            084/redis_2
+fee1b7b9dde1        redis:latest        "/entrypoint.sh redi   19 minutes ago      Up 5 minutes        6379/tcp            084/redis_1
+
+可以看到,执行结果跟预期的一样。 +那么问题来了,如果指定一个不存在的标签的几点来运行container会出现什么情况呢? +

+rio085:~$ sudo docker -H 192.168.1.83:2376 run --name redis_0 -d -e constraint:label_name==0 redis
+FATA[0000] Error response from daemon: unable to find a node that satisfies label_name==0
+
+ + +