diff --git a/site/features.md b/site/features.md index 478968e0..0abcc392 100644 --- a/site/features.md +++ b/site/features.md @@ -23,9 +23,7 @@ example](https://github.com/weaveworks/weave#example): * [Dynamic topologies](#dynamic-topologies) * [Container mobility](#container-mobility) * [Fault tolerance](#fault-tolerance) - * [Automatic IP address management](#ipam) - * [Automatic discovery with WeaveDNS](#dns) - * [Working with the Docker CLI and API](#proxy) + * [Further reading](#further-reading) ### Virtual Ethernet Switch @@ -67,25 +65,25 @@ notation](http://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing#CIDR_notat On $HOST1: - host1$ C=$(weave run 10.2.1.1/24 -ti ubuntu) + host1$ docker run -e WEAVE_CIDR=10.2.1.1/24 -ti ubuntu + root@7ca0f6ecf59f:/# And $HOST2: - host2$ C=$(weave run 10.2.1.2/24 -ti ubuntu) + host2$ docker run -e WEAVE_CIDR=10.2.1.2/24 -ti ubuntu + root@04c4831fafd3:/# -Then on $HOST1... +Then in the container on $HOST1... - host1$ docker attach $C - root@28841bd02eff:/# ping -c 1 -q 10.2.1.2 + root@7ca0f6ecf59f:/# ping -c 1 -q 10.2.1.2 PING 10.2.1.2 (10.2.1.2): 48 data bytes --- 10.2.1.2 ping statistics --- 1 packets transmitted, 1 packets received, 0% packet loss round-trip min/avg/max/stddev = 1.048/1.048/1.048/0.000 ms -Similarly, on $HOST2... +Similarly, in the container on $HOST2... - host2$ docker attach $C - root@f76829496120:/# ping -c 1 -q 10.2.1.1 + root@04c4831fafd3:/# ping -c 1 -q 10.2.1.1 PING 10.2.1.1 (10.2.1.1): 48 data bytes --- 10.2.1.1 ping statistics --- 1 packets transmitted, 1 packets received, 0% packet loss @@ -93,10 +91,10 @@ Similarly, on $HOST2... The IP addresses and netmasks can be anything you like, but make sure they don't conflict with any IP ranges in use on the hosts (including -those delegated to IPAM) or IP addresses of external services the -hosts or containers need to connect to. The same IP range must be used -everywhere, and the individual IP addresses must, of course, be -unique. +those delegated to weave's [automatic IP address allocator](#ipam)) or +IP addresses of external services the hosts or containers need to +connect to. The same IP range must be used everywhere, and the +individual IP addresses must, of course, be unique. ### Application isolation @@ -109,27 +107,27 @@ Let's begin by configuring weave's allocator to manage multiple subnets: host1$ weave launch -iprange 10.2.0.0/16 -ipsubnet 10.2.1.0/24 - host1$ weave launch-dns + host1$ weave launch-dns && weave launch-proxy + host1$ eval $(weave proxy-env) host2$ weave launch -iprange 10.2.0.0/16 -ipsubnet 10.2.1.0/24 $HOST1 - host2$ weave launch-dns + host2$ weave launch-dns && weave launch-proxy + host2$ eval $(weave proxy-env) This delegates the entire 10.2.0.0/16 subnet to weave, and instructs it to allocate from 10.2.1.0/24 within that if no specific subnet is specified. Now we can launch some containers in the default subnet: - host1$ weave run --name a1 -ti ubuntu - host2$ weave run --name a2 -ti ubuntu + host1$ docker run --name a1 -ti ubuntu + host2$ docker run --name a2 -ti ubuntu And some more containers in a different subnet: - host1$ weave run net:10.2.2.0/24 --name b1 -ti ubuntu - host2$ weave run net:10.2.2.0.24 --name b2 -ti ubuntu + host1$ docker run -e WEAVE_CIDR=net:10.2.2.0/24 --name b1 -ti ubuntu + host2$ docker run -e WEAVE_CIDR=net:10.2.2.0.24 --name b2 -ti ubuntu A quick 'ping' test in the containers confirms that they can talk to each other but not the containers of our first application... - host1:~$ docker attach b1 - root@b1:/# ping -c 1 -q b2 PING b2.weave.local (10.2.2.128) 56(84) bytes of data. --- b2.weave.local ping statistics --- @@ -153,7 +151,11 @@ well-known technique from the 'on metal' days to containers. If desired, a container can be attached to multiple subnets when it is started: - host1$ weave run net:default net:10.2.2.0/24 -ti ubuntu + host1$ docker run -e WEAVE_CIDR="net:default net:10.2.2.0/24" -ti ubuntu + +`net:default` is used here to request allocation of an address from +the default subnet in addition to one from an explicitly specified +range. NB: By default docker permits communication between containers on the same host, via their docker-assigned IP addresses. For complete @@ -166,17 +168,19 @@ be accomplished by starting them with the `--cap-drop net_raw` option. ### Dynamic network attachment -In some scenarios containers are started independently, e.g. via some -existing tool chain, or require more complex startup sequences than -provided by `weave run`. And sometimes the decision which application -network a container should be part of is made post-startup. For these -situations, weave allows an existing, running container to be attached -to the weave network. To illustrate, we can achieve the same effect as -the first example with +Sometimes the application network to which a container should be +attached is not known in advance. For these situations, weave allows +an existing, running container to be attached to the weave network. To +illustrate, we can achieve the same effect as the first example with - host1$ C=$(docker run -d -t -i ubuntu) + host1$ C=$(docker run -e WEAVE_CIDR=none -dti ubuntu) host1$ weave attach $C +(Note that since we modified `DOCKER_HOST` to point to the proxy +earlier, we have to pass `-e WEAVE_CIDR=none` to start a container +that _doesn't_ get automatically attached to the weave network for the +purposes of this example.) + There is a matching `weave detach` command: host1$ weave detach $C @@ -479,23 +483,12 @@ restarted in that event, and indeed may not even experience a temporary connectivity failure if the weave container is restarted quickly enough. -### Automatic IP Address Management +### Further reading -Weave can automatically assign unique IP addresses to each container -across the network. The `run`, `start`, `attach`, `expose` and `hide` -commands will then fetch an address automatically if none is -specified. See the [IPAM](ipam.html) documentation for details on how -to enable and use this feature. +We have made use of weave's automatic IP address allocation, DNS +server, and proxy throughout the examples. Each of these components +offers additional functionality which you can read about here: -### Automatic discovery with WeaveDNS - -WeaveDNS is a distributed DNS service for weave networks, enabling -containers to address each other by name rather than IP address. Find -out more about WeaveDNS from its [documentation](weavedns.html). - -### Working with the Docker CLI and API - -Instead of the `weave` command-line utility, you may prefer to use the -standard Docker command-line interface, or the Docker remote API, for -starting weave-enabled containers. This can be accomplished with the -[Weave Proxy](proxy.html). + * [Automatic IP address management](ipam.html) + * [Automatic discovery with WeaveDNS](weavedns.html) + * [Configuring the interaction with Docker](proxy.html)