Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save marcellodesales/361bcd023c527670d668 to your computer and use it in GitHub Desktop.
Save marcellodesales/361bcd023c527670d668 to your computer and use it in GitHub Desktop.
#!/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