-
-
Save marcellodesales/361bcd023c527670d668 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# Description: This script spins up a multi node Docker Swarm w/ Docker | |
# Networking and Consul discovery w/ Registrator | |
# Author: Ryan C Koch | |
# ryanckoch@gmail.com | |
# Usage: bash docker-playground.sh usage | |
usage () | |
{ | |
echo "Usage: $0 [argument]" | |
echo | |
echo "[argument]: create" | |
echo " start" | |
echo " status" | |
echo " stop" | |
echo " destroy" | |
} | |
create () | |
{ | |
echo "##### STARTING DOCKER-PLAYGROUND #####" | |
echo "### STARTING NODE docker-playground-consul ###" && \ | |
docker-machine create -d virtualbox docker-playground-consul && \ | |
echo "### STARTING SERVICES ON docker-playground-consul ###" && \ | |
docker $(docker-machine config docker-playground-consul) run -d \ | |
--net=host \ | |
--name=consul-server \ | |
--restart=always \ | |
-p 8300:8300 \ | |
-p 8301:8301 \ | |
-p 8301:8301/udp \ | |
-p 8302:8302 \ | |
-p 8302:8302/udp \ | |
-p 8400:8400 \ | |
-p 8500:8500 \ | |
-p 8600:53/udp \ | |
progrium/consul \ | |
-dc=local \ | |
-server -advertise $(docker-machine ip docker-playground-consul) \ | |
-bootstrap-expect 1 && \ | |
docker $(docker-machine config docker-playground-consul) run -d \ | |
--name=registrator \ | |
--restart=always \ | |
-e SERVICE_NAME=registrator \ | |
-v /var/run/docker.sock:/tmp/docker.sock \ | |
gliderlabs/registrator:master \ | |
consul://$(docker-machine ip docker-playground-consul):8500 && \ | |
echo "### STARTING NODE docker-playground-swarm1 ###" && \ | |
docker-machine create -d virtualbox \ | |
--swarm --swarm-image="swarm" --swarm-master \ | |
--swarm-discovery="consul://$(docker-machine ip docker-playground-consul):8500" \ | |
--engine-opt="cluster-store=consul://$(docker-machine ip docker-playground-consul):8500" \ | |
--engine-opt="cluster-advertise=eth1:2376" \ | |
docker-playground-swarm1 && \ | |
echo "### STARTING SERVICES ON docker-playground-swarm1 ###" && \ | |
docker $(docker-machine config docker-playground-swarm1) run -d \ | |
--name consul-client \ | |
--net=host \ | |
--restart=always \ | |
-e SERVICE_NAME=consul-client \ | |
-p 8300:8300 \ | |
-p 8301:8301 \ | |
-p 8301:8301/udp \ | |
-p 8302:8302 \ | |
-p 8302:8302/udp \ | |
-p 8400:8400 \ | |
-p 8500:8500 \ | |
-p 53:53 \ | |
-p 53:53/udp \ | |
progrium/consul \ | |
-dc=local \ | |
-advertise $(docker-machine ip docker-playground-swarm1) -join $(docker-machine ip docker-playground-consul) && \ | |
docker $(docker-machine config docker-playground-swarm1) run -d \ | |
--name=registrator \ | |
--restart=always \ | |
-e SERVICE_NAME=registrator \ | |
-v /var/run/docker.sock:/tmp/docker.sock \ | |
gliderlabs/registrator:master \ | |
consul://$(docker-machine ip docker-playground-swarm1):8500 && \ | |
echo "### STARTING NODE docker-playground-swarm2 ###" && \ | |
docker-machine create -d virtualbox \ | |
--swarm --swarm-image="swarm" \ | |
--swarm-discovery="consul://$(docker-machine ip docker-playground-consul):8500" \ | |
--engine-opt="cluster-store=consul://$(docker-machine ip docker-playground-consul):8500" \ | |
--engine-opt="cluster-advertise=eth1:2376" \ | |
docker-playground-swarm2 && \ | |
echo "### STARTING SERVICES ON docker-playground-swarm2 ###" && \ | |
docker $(docker-machine config docker-playground-swarm2) run -d \ | |
--name consul-client \ | |
--net=host \ | |
--restart=always \ | |
-e SERVICE_NAME=consul-client \ | |
-p 8300:8300 \ | |
-p 8301:8301 \ | |
-p 8301:8301/udp \ | |
-p 8302:8302 \ | |
-p 8302:8302/udp \ | |
-p 8400:8400 \ | |
-p 8500:8500 \ | |
-p 53:53 \ | |
-p 53:53/udp \ | |
progrium/consul \ | |
-dc=local \ | |
-advertise $(docker-machine ip docker-playground-swarm2) -join $(docker-machine ip docker-playground-consul) && \ | |
docker $(docker-machine config docker-playground-swarm2) run -d \ | |
--name=registrator \ | |
--restart=always \ | |
-e SERVICE_NAME=registrator \ | |
-v /var/run/docker.sock:/tmp/docker.sock \ | |
gliderlabs/registrator:master \ | |
consul://$(docker-machine ip docker-playground-swarm2):8500 && \ | |
echo "##### DOCKER-PLAYGROUND STARTED #####" | |
} | |
start () | |
{ | |
docker-machine start docker-playground-consul docker-playground-swarm1 docker-playground-swarm2 | |
} | |
stop () | |
{ | |
docker-machine stop docker-playground-consul | |
docker-machine stop docker-playground-swarm1 | |
docker-machine stop docker-playground-swarm2 | |
} | |
status () | |
{ | |
docker-machine ls | grep docker-playground | |
} | |
destroy () | |
{ | |
stop | |
docker-machine rm docker-playground-consul | |
docker-machine rm docker-playground-swarm1 | |
docker-machine rm docker-playground-swarm2 | |
} | |
details () | |
{ | |
echo "consul: http://$(docker-machine ip docker-playground-consul):8500" && \ | |
echo "swarm: tcp://$(docker-machine ip docker-playground-swarm1):3376" && \ | |
echo && \ | |
echo "To connect to the swarm run:" && \ | |
echo 'eval $(docker-machine env --swarm docker-playground-swarm1)' | |
} | |
case "$1" in | |
create) | |
create | |
details | |
;; | |
start) | |
start | |
details | |
;; | |
stop) | |
stop | |
;; | |
status) | |
status | |
details | |
;; | |
destroy) | |
stop | |
destroy | |
;; | |
*) | |
usage | |
esac |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment