|  |  | @@ -0,0 +1,110 @@ | 
    
    |  |  | # Weave Net and Docker Swarm | 
    
    |  |  | 
 | 
    
    |  |  | This example show how-to setup a very simple Swarm cluster with Weave Net. | 
    
    |  |  | 
 | 
    
    |  |  | ## Infratructure | 
    
    |  |  | 
 | 
    
    |  |  | There are two hosts that have a recent version of Docker Engine running. | 
    
    |  |  | 
 | 
    
    |  |  | These hosts are named `host1` and `host2`, and might have the following in | 
    
    |  |  | `/etc/hosts` or you just substitute IP addresses in the commands shown below. | 
    
    |  |  | 
 | 
    
    |  |  | 
 | 
    
    |  |  | ``` | 
    
    |  |  | 192.168.131.139   host1 | 
    
    |  |  | 192.168.131.140   host2 | 
    
    |  |  | ``` | 
    
    |  |  | 
 | 
    
    |  |  | ## Install and launch Weave Net | 
    
    |  |  | 
 | 
    
    |  |  | To install Weave Net run the following commands on each of the hosts | 
    
    |  |  | ``` | 
    
    |  |  | sudo curl --silent --location git.io/weave --output /usr/local/bin/weave | 
    
    |  |  | chmod +x /usr/local/bin/weave | 
    
    |  |  | ``` | 
    
    |  |  | 
 | 
    
    |  |  | Now start the router on each of the host with | 
    
    |  |  | ``` | 
    
    |  |  | weave luanch-router host1 host2 | 
    
    |  |  | ``` | 
    
    |  |  | 
 | 
    
    |  |  | Proxy needs to be launched with the following arguments | 
    
    |  |  | ``` | 
    
    |  |  | weave launch-proxy -H 0.0.0.0:12375 --no-detect-tls | 
    
    |  |  |  | 
    
    |  |  | ``` | 
    
    |  |  | 
 | 
    
    |  |  | > You can omit `--no-detect-tls`, but in that case you might wish to omit | 
    
    |  |  | > all of the arugments. If so, you will need to ensure that TLS keys are | 
    
    |  |  | > in all the right places. | 
    
    |  |  |  | 
    
    |  |  | ## Launch Swarm manger | 
    
    |  |  | 
 | 
    
    |  |  | Swarm manager can run very simply like this agains two of the host that | 
    
    |  |  | run Weave Net and the Docker API proxy is listening on port 12375: | 
    
    |  |  | 
 | 
    
    |  |  | ``` | 
    
    |  |  | docker run -d -p 2377:2375 swarm manage nodes://host1:12375,host2:12375 | 
    
    |  |  | ``` | 
    
    |  |  | 
 | 
    
    |  |  | > If you would like to use a different discovery mechanism, you can do this | 
    
    |  |  | > but then you will need run Swarm agents on each of the hosts and ensure | 
    
    |  |  | > that those are pointed at the address the proxy is listening on. This | 
    
    |  |  | > would typically mean `swarm join --addr <ip>:12375 <discovery>`. | 
    
    |  |  |  | 
    
    |  |  | ## Ping Me, I am on Weave Net! | 
    
    |  |  | 
 | 
    
    |  |  | Let's start 20 containers via Swarm, on the same host the manager is running. | 
    
    |  |  | ``` | 
    
    |  |  | for i in $(seq 20) | 
    
    |  |  | do docker -H 127.0.0.1:2377 run -td --name="pingme-${i}" --hostname="pingme.weave.local" centos:7 | 
    
    |  |  | done | 
    
    |  |  | ``` | 
    
    |  |  | 
 | 
    
    |  |  | Check `weave status dns` and you will see there are 20 entries now. You can also | 
    
    |  |  | do a lookup with `weave dns-lookup pingme` a few times and see that shuffled IPs | 
    
    |  |  | are being returned each time. | 
    
    |  |  | 
 | 
    
    |  |  | Next, let's run the ping test like this: | 
    
    |  |  | ``` | 
    
    |  |  | $ docker -H 127.0.0.1:2377 run -ti centos:7 | 
    
    |  |  | [root@4a73489ae22e /]# ping -c1 pingme | 
    
    |  |  | PING pingme.weave.local (10.40.0.5) 56(84) bytes of data. | 
    
    |  |  | 64 bytes from pingme.weave.local (10.40.0.5): icmp_seq=1 ttl=64 time=1.12 ms | 
    
    |  |  |  | 
    
    |  |  | --- pingme.weave.local ping statistics --- | 
    
    |  |  | 1 packets transmitted, 1 received, 0% packet loss, time 0ms | 
    
    |  |  | rtt min/avg/max/mdev = 1.128/1.128/1.128/0.000 ms | 
    
    |  |  | [root@4a73489ae22e /]# ping -c1 pingme | 
    
    |  |  | PING pingme.weave.local (10.40.0.2) 56(84) bytes of data. | 
    
    |  |  | 64 bytes from pingme.weave.local (10.40.0.2): icmp_seq=1 ttl=64 time=9.34 ms | 
    
    |  |  |  | 
    
    |  |  | --- pingme.weave.local ping statistics --- | 
    
    |  |  | 1 packets transmitted, 1 received, 0% packet loss, time 0ms | 
    
    |  |  | rtt min/avg/max/mdev = 9.345/9.345/9.345/0.000 ms | 
    
    |  |  | [root@4a73489ae22e /]# ping -c1 pingme | 
    
    |  |  | PING pingme.weave.local (10.32.0.1) 56(84) bytes of data. | 
    
    |  |  | 64 bytes from pingme.weave.local (10.32.0.1): icmp_seq=1 ttl=64 time=0.166 ms | 
    
    |  |  |  | 
    
    |  |  | --- pingme.weave.local ping statistics --- | 
    
    |  |  | 1 packets transmitted, 1 received, 0% packet loss, time 0ms | 
    
    |  |  | rtt min/avg/max/mdev = 0.166/0.166/0.166/0.000 ms | 
    
    |  |  | [root@4a73489ae22e /]# ping -c1 pingme | 
    
    |  |  | PING pingme.weave.local (10.32.0.8) 56(84) bytes of data. | 
    
    |  |  | 64 bytes from pingme.weave.local (10.32.0.8): icmp_seq=1 ttl=64 time=0.162 ms | 
    
    |  |  |  | 
    
    |  |  | --- pingme.weave.local ping statistics --- | 
    
    |  |  | 1 packets transmitted, 1 received, 0% packet loss, time 0ms | 
    
    |  |  | rtt min/avg/max/mdev = 0.162/0.162/0.162/0.000 ms | 
    
    |  |  | [root@4a73489ae22e /]# ping -c1 pingme | 
    
    |  |  | PING pingme.weave.local (10.40.0.4) 56(84) bytes of data. | 
    
    |  |  | 64 bytes from pingme.weave.local (10.40.0.4): icmp_seq=1 ttl=64 time=0.987 ms | 
    
    |  |  |  | 
    
    |  |  | --- pingme.weave.local ping statistics --- | 
    
    |  |  | 1 packets transmitted, 1 received, 0% packet loss, time 0ms | 
    
    |  |  | rtt min/avg/max/mdev = 0.987/0.987/0.987/0.000 ms | 
    
    |  |  | [root@4a73489ae22e /]# exit | 
    
    |  |  | ``` | 
    
    |  |  | 
 | 
    
    |  |  | Now, just to convince yourself, run `docker -H 127.0.0.1:2377 ps` to check that all | 
    
    |  |  | of these 20 containers are on different hosts. |