Skip to content

Instantly share code, notes, and snippets.

@ATLJLawrie
Last active March 20, 2018 21:32
Show Gist options
  • Save ATLJLawrie/9bd214355f77ebf25b9340497072b94e to your computer and use it in GitHub Desktop.
Save ATLJLawrie/9bd214355f77ebf25b9340497072b94e to your computer and use it in GitHub Desktop.
Build local swarm cluster with viz, portainer, traefik and then setup DNS resolution
echo "Removing nodes 1-3"
docker-machine rm node-1 node-2 node-3
# use the below command with the appropriate virtualbox network if having issues
# sudo ifconfig vboxnet0 down && sudo ifconfig vboxnet0 up
#!/usr/bin/env bash
set -e
for i in 1 2 3; do
docker-machine create \
-d virtualbox \
-engine-insecure-registry 192.168.99.1:5000 \
node-$i
done
eval $(docker-machine env node-1)
docker swarm init \
--advertise-addr $(docker-machine ip node-1) \
--listen-addr $(docker-machine ip node-1):2377
#MANAGER_TOKEN=$(docker swarm join-token -q manager)
#for i in 2 3; do
# eval $(docker-machine env node-$i)
#
# docker swarm join --token $MANAGER_TOKEN $(docker-machine ip node-1):2377
#done
WORKER_TOKEN=$(docker swarm join-token -q worker)
for i in 2 3; do
eval $(docker-machine env node-$i)
docker swarm join --token $WORKER_TOKEN $(docker-machine ip node-1):2377
done
echo ""
echo "Starting Docker Swarm Visualizer via node-1"
docker-machine ssh node-1 "docker service create \
--name viz \
--publish 9001:8080/tcp \
--constraint=node.role==manager \
--mount type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock \
dockersamples/visualizer"
echo ""
echo ">> The Swarm Cluster is set up!"
echo ">> run - eval $(docker-machine env node-1)"
echo "Starting Portainer via node-1"
docker-machine ssh node-1 "docker service create \
--name portainer \
--publish 9000:9000 \
--constraint 'node.role == manager' \
--mount type=bind,src=//var/run/docker.sock,dst=/var/run/docker.sock \
--detach=false \
portainer/portainer \
-H unix:///var/run/docker.sock \
--no-auth"
echo ""
#!/usr/bin/env bash
echo "Starting Traefik via docker stack deploy"
eval $(docker-machine env node-1)
docker stack deploy --compose-file traefik-docker-compose.yml traefik
#!/usr/bin/env bash
echo "Starting Local Registry - 192.168.99.1 on port 5000"
if [ ! "$(docker ps -q -f name=registry)" ]; then
if [ "$(docker ps -aq -f status=exited -f name=registry)" ]; then
# cleanup
docker rm registry
fi
# run your container
docker run -d \
-p 5000:5000 \
--restart=always \
--name registry \
-v ~/docker_registry_volume:/var/lib/registry \
registry:2
echo "Container started"
else
echo "Container already running"
fi
echo "Make sure to tag and push images to 192.168.99.1:5000"
#!/bin/bash
echo "Updating brew"
brew update
echo "Installing dnsmasq via brew"
brew install dnsmasq
echo "appending swarm.primerev.com and swarm.primerevenue.com to /usr/local/etc/dnsmasq.conf"
sed -i '' '/swarm.primerev.com/d' /usr/local/etc/dnsmasq.conf
sed -i '' '/swarm.primerevenue.com/d' /usr/local/etc/dnsmasq.conf
cat <<EOF >> /usr/local/etc/dnsmasq.conf
address=/swarm.primerev.com/$(docker-machine ip node-1)
address=/swarm.primerevenue.com/$(docker-machine ip node-1)
EOF
echo "please enter sudo password at prompts"
sudo mkdir /etc/resolver/
sudo tee /etc/resolver/swarm.primerev.com >/dev/null <<EOF
nameserver 127.0.0.1
EOF
sudo tee /etc/resolver/swarm.primerevenue.com >/dev/null <<EOF
nameserver 127.0.0.1
EOF
echo "To have launchd start dnsmasq now and restart at startup:
sudo brew services start dnsmasq"
version: "3"
networks:
proxy:
driver: overlay
services:
traefik:
image: traefik:v1.3.1
networks:
- proxy
ports:
- 8080:8080
- 80:80
volumes:
- /var/run/docker.sock:/var/run/docker.sock
command: --docker --docker.swarmmode --docker.domain=swarm.local --docker.watch --web
deploy:
mode: global
placement:
constraints:
- node.role == manager
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment