Install virtualbox on your host
if [[ ! -d "$HOME/bin" ]]; then mkdir -p "$HOME/bin"; fi && \
curl -L https://github.com/docker/machine/releases/download/v0.12.2/docker-machine-Windows-x86_64.exe > "$HOME/bin/docker-machine.exe" && \
chmod +x "$HOME/bin/docker-machine.exe"
curl -L https://github.com/docker/machine/releases/download/v0.12.2/docker-machine-`uname -s`-`uname -m` >/tmp/docker-machine &&
chmod +x /tmp/docker-machine &&
sudo cp /tmp/docker-machine /usr/local/bin/docker-machine
for i in 1 2 3; do
docker-machine create -d virtualbox swarm-$i
done
docker-machine ls
The output should be something similar to
$ ./docker-machine.exe ls
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
swarm-1 - virtualbox Running tcp://192.168.99.102:2376 v17.06.2-ce
swarm-2 - virtualbox Running tcp://192.168.99.103:2376 v17.06.2-ce
swarm-3 - virtualbox Running tcp://192.168.99.104:2376 v17.06.2-ce
Creating the cluster
eval "$(docker-machine env swarm-1)"
docker swarm init --advertise-addr $(docker-machine ip swarm-1)
##Connect to your docker machines through ssh
docker-machine ssh swarm-1
eval "$(docker-machine env swarm-1)"
docker service create \
--name=visualizer \
--publish=8000:8080/tcp \
--constraint=node.role==manager \
--mount=type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock \
dockersamples/visualizer
Wait a bit and check the status of the visualizer service. Pulling dockersamples/visualizer:latest will speed things up!
docker service ls
Once up open in your browser
echo http://$(docker-machine ip swarm-1):8000
eval "$(docker-machine env swarm-1)"
JOIN_TOKEN=$(docker swarm join-token -q worker)
for i in 2 3; do
eval "$(docker-machine env swarm-$i)"
docker swarm join --token $JOIN_TOKEN \
--advertise-addr $(docker-machine ip swarm-$i) \
$(docker-machine ip swarm-1):2377
done
eval "$(docker-machine env swarm-1)"
docker node ls
eval "$(docker-machine env swarm-1)"
docker network create -d overlay routing-mesh
eval "$(docker-machine env swarm-1)"
docker service create \
--name=docker-routing-mesh \
--publish=8080:8080/tcp \
--network routing-mesh \
--reserve-memory 20m \
albertogviana/docker-routing-mesh:1.0.0
curl http://$(docker-machine ip swarm-1):8080
curl http://$(docker-machine ip swarm-2):8080
curl http://$(docker-machine ip swarm-3):8080
docker service scale docker-routing-mesh=3
while true; do curl http://$(docker-machine ip swarm-1):8080; sleep 1; echo "\n"; done
eval "$(docker-machine env swarm-1)"
docker service update \
--update-failure-action pause \
--update-parallelism 1 \
--image albertogviana/docker-routing-mesh:2.0.0 \
docker-routing-mesh
while true; do curl http://$(docker-machine ip swarm-1):8080/health; sleep 1; echo "\n"; done
echo test | docker secret create my_secret -
docker secret ls
eval "$(docker-machine env swarm-1)"
docker service update \
--update-failure-action pause \
--update-parallelism 1 \
--secret-add my_secret \
--image albertogviana/docker-routing-mesh:2.0.0 \
docker-routing-mesh
docker node update --availability=drain swarm-3
docker node ls
docker node update --availability=active swarm-3
docker system info
docker system df
docker system prune