mirror of
https://github.com/yeasy/docker_practice.git
synced 2024-12-25 14:38:54 +00:00
Update usage.md
This commit is contained in:
parent
0b607e92a2
commit
a3ca178621
@ -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
|
18ceefa5e86f redis:latest /entrypoint.sh redis 25 minutes ago Up 22 seconds 192.168.1.83:32771->6379/tcp 083/node-1
|
||||||
</code></pre>
|
</code></pre>
|
||||||
可以看到,所有的container都是分布在同一个节点上运行的。
|
可以看到,所有的container都是分布在同一个节点上运行的。
|
||||||
|
|
||||||
|
##Swarm Filters
|
||||||
|
swarm的调度器(scheduler)在选择节点运行containers的时候支持几种过滤器 (filter):Constraint,Affinity,Port,Dependency,Health
|
||||||
|
这些选项可以在执行swarm manage命令的时候通过--filter选项来设置。
|
||||||
|
###Constraint Filter
|
||||||
|
constraint 是一个跟具体节点相关联的键值对,可以看做是每个节点的标签,这个标签可以在启动docker daemon的时候指定,比如
|
||||||
|
<pre><code>
|
||||||
|
sudo docker -d --label label_name=label01
|
||||||
|
</code></pre>
|
||||||
|
也可以写在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:
|
||||||
|
<pre><code>
|
||||||
|
DOCKER_OPTS="-H 0.0.0.0:2375 -H unix:///var/run/docker.sock --label label_name=083"
|
||||||
|
</code></pre>
|
||||||
|
在使用docker run命令启动container的时候使用 -e constarint:key=value的形式,可以指定container运行的节点,比如我们想在84上面启动一个redis container,
|
||||||
|
<pre><code>
|
||||||
|
rio085:~$ sudo docker -H 192.168.1.83:2376 run --name redis_1 -d -e constraint:label_name==084 redis
|
||||||
|
fee1b7b9dde13d64690344c1f1a4c3f5556835be46b41b969e4090a083a6382d
|
||||||
|
</code></pre>
|
||||||
|
主要,是**两个**等号,不是一个等号,这一点会经常被忽略。
|
||||||
|
接下来再在084这台机器上启动一个redis container
|
||||||
|
<pre><code>
|
||||||
|
rio085:~$ sudo docker -H 192.168.1.83:2376 run --name redis_2 -d -e constraint:label_name==084 redis 4968d617d9cd122fc2e17b3bad2f2c3b5812c0f6f51898024a96c4839fa000e1
|
||||||
|
</code></pre>
|
||||||
|
然后再在083这台机器上启动另外一个redis container
|
||||||
|
<pre><code>
|
||||||
|
rio085:~$ sudo docker -H 192.168.1.83:2376 run --name redis_3 -d -e constraint:label_name==083 redis 7786300b8d2232c2335ac6161c715de23f9179d30eb5c7e9c4f920a4f1d39570
|
||||||
|
</code></pre>
|
||||||
|
现在来看下执行情况:
|
||||||
|
<pre><code>
|
||||||
|
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
|
||||||
|
</code></pre>
|
||||||
|
可以看到,执行结果跟预期的一样。
|
||||||
|
那么问题来了,如果指定一个不存在的标签的几点来运行container会出现什么情况呢?
|
||||||
|
<pre><code>
|
||||||
|
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
|
||||||
|
</code></pre>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user