Skip to content

Instantly share code, notes, and snippets.

@errordeveloper
Last active March 27, 2021 15:03
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 5 You must be signed in to fork a gist
  • Save errordeveloper/9bc72547a6a7b113330d to your computer and use it in GitHub Desktop.
Save errordeveloper/9bc72547a6a7b113330d to your computer and use it in GitHub Desktop.
A quick guide to using Weave Net with Docker Swarm

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 <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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment