# Weave Net and Docker Swarm This example show how-to setup a very simple Swarm cluster enabled 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 :12375 `. ## 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.