Create filter.md (#3598)

This commit is contained in:
Wang Jie 2017-06-16 05:30:32 +08:00 committed by John Mulhausen
parent bb70a0eb17
commit 5175619a47
1 changed files with 14 additions and 14 deletions

View File

@ -70,9 +70,9 @@ these default tags or custom labels. The Swarm scheduler looks for matching node
on the cluster and starts the container there. This approach has several on the cluster and starts the container there. This approach has several
practical applications: practical applications:
* Schedule based on specific host properties, for example,`storage=ssd` schedules * Schedule based on specific host properties, for example, `storage=ssd` schedules
containers on specific hardware. containers on specific hardware.
* Force containers to run in a given location, for example region=us-east`. * Force containers to run in a given location, for example `region=us-east`.
* Create logical cluster partitions by splitting a cluster into * Create logical cluster partitions by splitting a cluster into
sub-clusters with different properties, for example `environment=production`. sub-clusters with different properties, for example `environment=production`.
@ -96,11 +96,11 @@ $ swarm join --advertise=192.168.0.43:2375 token://XXXXXXXXXXXXXXXXXX
``` ```
Once the nodes are joined to a cluster, the Swarm manager pulls their respective Once the nodes are joined to a cluster, the Swarm manager pulls their respective
tags. Moving forward, the manager takes the tags into account when scheduling tags. Moving forward, the manager takes the tags into account when scheduling
new containers. new containers.
Continuing the previous example, assuming your cluster with `node-1` and Continuing the previous example, assuming your cluster with `node-1` and
`node-2`, you can run a MySQL server container on the cluster. When you run the `node-2`, you can run a MySQL server container on the cluster. When you run the
container, you can use a `constraint` to ensure the database gets good I/O container, you can use a `constraint` to ensure the database gets good I/O
performance. You do this by filtering for nodes with flash drives: performance. You do this by filtering for nodes with flash drives:
@ -114,7 +114,7 @@ f8b693db9cd6 mysql:latest "mysqld" Less than a second a
``` ```
In this example, the manager selected all nodes that met the `storage=ssd` In this example, the manager selected all nodes that met the `storage=ssd`
constraint and applied resource management on top of them. Only `node-1` was constraint and applied resource management on top of them. Only `node-1` was
selected because it's the only host running flash. selected because it's the only host running flash.
Suppose you want to run an Nginx frontend in a cluster. In this case, you wouldn't want flash drives because the frontend mostly writes logs to disk. Suppose you want to run an Nginx frontend in a cluster. In this case, you wouldn't want flash drives because the frontend mostly writes logs to disk.
@ -194,7 +194,7 @@ Use an `affinity` filter to create "attractions" between containers. For
example, you can run a container and instruct Swarm to schedule it next to example, you can run a container and instruct Swarm to schedule it next to
another container based on these affinities: another container based on these affinities:
* container name or id * container name or ID
* an image on the host * an image on the host
* a custom label applied to the container * a custom label applied to the container
@ -230,7 +230,7 @@ CONTAINER ID IMAGE COMMAND CREATED
963841b138d8 logger:latest "logger" Less than a second ago running node-1/logger 963841b138d8 logger:latest "logger" Less than a second ago running node-1/logger
``` ```
Because of `name` affinity, the `logger` container ends up on `node-1` along Because of `name` affinity, the `logger` container ends up on `node-1` along
with the `frontend` container. Instead of the `frontend` name you could have with the `frontend` container. Instead of the `frontend` name you could have
supplied its ID as follows: supplied its ID as follows:
@ -332,7 +332,7 @@ cannot be done (because the dependent container doesn't exist, or because the
node doesn't have enough resources), it will prevent the container creation. node doesn't have enough resources), it will prevent the container creation.
The combination of multiple dependencies are honored if possible. For The combination of multiple dependencies are honored if possible. For
instance, if you specify `--volumes-from=A --net=container:B`, the scheduler instance, if you specify `--volumes-from=A --net=container:B`, the scheduler
attempts to co-locate the container on the same node as `A` and `B`. If those attempts to co-locate the container on the same node as `A` and `B`. If those
containers are running on different nodes, Swarm does not schedule the container. containers are running on different nodes, Swarm does not schedule the container.
@ -407,7 +407,7 @@ after deleting `prickly_englbart`.
A container running with `--net=host` differs from the default A container running with `--net=host` differs from the default
`bridge` mode as the `host` mode does not perform any port binding. Instead, `bridge` mode as the `host` mode does not perform any port binding. Instead,
host mode requires that you explicitly expose one or more port numbers. You host mode requires that you explicitly expose one or more port numbers. You
expose a port using `EXPOSE` in the `Dockerfile` or `--expose` on the command expose a port using `EXPOSE` in the `Dockerfile` or `--expose` on the command
line. Swarm makes use of this information in conjunction with the `host` mode to line. Swarm makes use of this information in conjunction with the `host` mode to
choose an available node for a new container. choose an available node for a new container.
@ -441,7 +441,7 @@ $ docker tcp://<manager_ip:manager_port> run -d --expose=80 --net=host nginx
FATA[0000] Error response from daemon: unable to find a node with port 80/tcp available in the Host mode FATA[0000] Error response from daemon: unable to find a node with port 80/tcp available in the Host mode
``` ```
However, port binding to the different value, for example `81`, is still allowed. However, port binding to the different value, for example `81`, is still allowed.
```bash ```bash
$ docker tcp://<manager_ip:manager_port> run -d -p 81:80 nginx:latest $ docker tcp://<manager_ip:manager_port> run -d -p 81:80 nginx:latest
@ -505,10 +505,10 @@ The following examples illustrate some possible expressions:
* `constraint:node!=/node-[01]/` matches all nodes, except `node-0` and `node-1`. * `constraint:node!=/node-[01]/` matches all nodes, except `node-0` and `node-1`.
* `constraint:node!=/foo\[bar\]/` matches all nodes, except `foo[bar]`. You can see the use of escape characters here. * `constraint:node!=/foo\[bar\]/` matches all nodes, except `foo[bar]`. You can see the use of escape characters here.
* `constraint:node==/(?i)node1/` matches node `node1` case-insensitive. So `NoDe1` or `NODE1` also match. * `constraint:node==/(?i)node1/` matches node `node1` case-insensitive. So `NoDe1` or `NODE1` also match.
* `affinity:image==~redis` tries to match for nodes running container with a `redis` image * `affinity:image==~redis` tries to match for nodes running container with a `redis` image.
* `constraint:region==~us*` searches for nodes in the cluster belonging to the `us` region * `constraint:region==~us*` searches for nodes in the cluster belonging to the `us` region.
* `affinity:container!=~redis*` schedule a new `redis5` container to a node * `affinity:container!=~redis*` schedules a new `redis5` container to a node
without a container that satisfies `redis*` without a container that satisfies `redis*`.
## Related information ## Related information