Skip to content

Instantly share code, notes, and snippets.

@lilithmooncohen
Last active April 1, 2019 22:28
Show Gist options
  • Select an option

  • Save lilithmooncohen/65346985c99cdc469d96 to your computer and use it in GitHub Desktop.

Select an option

Save lilithmooncohen/65346985c99cdc469d96 to your computer and use it in GitHub Desktop.

Revisions

  1. Ryan C Koch revised this gist Dec 14, 2015. 1 changed file with 135 additions and 103 deletions.
    238 changes: 135 additions & 103 deletions docker-playground.sh
    Original file line number Diff line number Diff line change
    @@ -6,6 +6,10 @@
    # [email protected]
    # Usage: bash docker-playground.sh usage

    PLAYGROUND_NAME="docker-playground"
    CONSUL_IMAGE="progrium/consul"
    REGISTRATOR_IMAGE="gliderlabs/registrator:master"

    usage ()
    {
    echo "Usage: $0 [argument]"
    @@ -14,143 +18,166 @@ usage ()
    echo " start"
    echo " status"
    echo " stop"
    echo " restart"
    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 ###" && \
    echo "##### STARTING $PLAYGROUND_NAME #####"

    echo "### STARTING NODE $PLAYGROUND_NAME-consul ###" && \
    docker-machine create -d virtualbox $PLAYGROUND_NAME-consul && \

    echo "### STARTING SERVICES ON $PLAYGROUND_NAME-consul ###" && \
    provision_consul && \

    echo "### STARTING NODE $PLAYGROUND_NAME-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" \
    --swarm-discovery="consul://$(docker-machine ip $PLAYGROUND_NAME-consul):8500" \
    --engine-opt="cluster-store=consul://$(docker-machine ip $PLAYGROUND_NAME-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 ###" && \
    $PLAYGROUND_NAME-swarm1 && \

    echo "### STARTING SERVICES ON $PLAYGROUND_NAME-swarm1 ###" && \
    provision_swarm1 && \

    echo "### STARTING NODE $PLAYGROUND_NAME-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" \
    --swarm-discovery="consul://$(docker-machine ip $PLAYGROUND_NAME-consul):8500" \
    --engine-opt="cluster-store=consul://$(docker-machine ip $PLAYGROUND_NAME-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 #####"
    $PLAYGROUND_NAME-swarm2 && \

    echo "### STARTING SERVICES ON $PLAYGROUND_NAME-swarm2 ###" && \
    provision_swarm2 && \
    echo "##### $PLAYGROUND_NAME STARTED #####"
    }

    provision_consul()
    {
    docker $(docker-machine config $PLAYGROUND_NAME-consul) rm -f consul-server registrator || true && \

    docker $(docker-machine config $PLAYGROUND_NAME-consul) run -d \
    --net=host \
    --name=consul-server \
    -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 \
    $CONSUL_IMAGE \
    -dc=local \
    -server -advertise $(docker-machine ip $PLAYGROUND_NAME-consul) \
    -bootstrap-expect 1 && \

    docker $(docker-machine config $PLAYGROUND_NAME-consul) run -d \
    --name=registrator \
    -e SERVICE_NAME=registrator \
    -v /var/run/docker.sock:/tmp/docker.sock \
    $REGISTRATOR_IMAGE \
    consul://$(docker-machine ip $PLAYGROUND_NAME-consul):8500
    }
    provision_swarm1()
    {
    docker $(docker-machine config $PLAYGROUND_NAME-swarm1) rm -f consul-client registrator || true && \

    docker $(docker-machine config $PLAYGROUND_NAME-swarm1) run -d \
    --name consul-client \
    --net=host \
    -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 \
    $CONSUL_IMAGE \
    -dc=local \
    -advertise $(docker-machine ip $PLAYGROUND_NAME-swarm1) -join $(docker-machine ip $PLAYGROUND_NAME-consul) && \

    docker $(docker-machine config $PLAYGROUND_NAME-swarm1) run -d \
    --name=registrator \
    -e SERVICE_NAME=registrator \
    -v /var/run/docker.sock:/tmp/docker.sock \
    $REGISTRATOR_IMAGE \
    consul://$(docker-machine ip $PLAYGROUND_NAME-swarm1):8500
    }
    provision_swarm2()
    {
    docker $(docker-machine config $PLAYGROUND_NAME-swarm2) rm -f consul-client registrator || true && \

    docker $(docker-machine config $PLAYGROUND_NAME-swarm2) run -d \
    --name consul-client \
    --net=host \
    -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 \
    $CONSUL_IMAGE \
    -dc=local \
    -advertise $(docker-machine ip $PLAYGROUND_NAME-swarm2) -join $(docker-machine ip $PLAYGROUND_NAME-consul) && \

    docker $(docker-machine config $PLAYGROUND_NAME-swarm2) run -d \
    --name=registrator \
    -e SERVICE_NAME=registrator \
    -v /var/run/docker.sock:/tmp/docker.sock \
    $REGISTRATOR_IMAGE \
    consul://$(docker-machine ip $PLAYGROUND_NAME-swarm2):8500
    }

    start ()
    {
    docker-machine start docker-playground-consul docker-playground-swarm1 docker-playground-swarm2
    docker-machine start $PLAYGROUND_NAME-consul && \
    provision_consul && \
    docker-machine start $PLAYGROUND_NAME-swarm1 && \
    provision_swarm1 && \
    docker-machine start $PLAYGROUND_NAME-swarm2 && \
    provision_swarm2
    }

    stop ()
    {
    docker-machine stop docker-playground-consul
    docker-machine stop docker-playground-swarm1
    docker-machine stop docker-playground-swarm2
    docker-machine stop $PLAYGROUND_NAME-consul
    docker-machine stop $PLAYGROUND_NAME-swarm1
    docker-machine stop $PLAYGROUND_NAME-swarm2
    }

    status ()
    {
    docker-machine ls | grep docker-playground
    docker-machine ls | grep $PLAYGROUND_NAME
    }

    destroy ()
    {
    stop
    docker-machine rm docker-playground-consul
    docker-machine rm docker-playground-swarm1
    docker-machine rm docker-playground-swarm2
    docker-machine rm $PLAYGROUND_NAME-consul
    docker-machine rm $PLAYGROUND_NAME-swarm1
    docker-machine rm $PLAYGROUND_NAME-swarm2
    }

    details ()
    {
    echo "consul: http://$(docker-machine ip docker-playground-consul):8500" && \
    echo "swarm: tcp://$(docker-machine ip docker-playground-swarm1):3376" && \
    echo
    echo "consul: http://$(docker-machine ip $PLAYGROUND_NAME-consul):8500" && \
    echo "swarm: tcp://$(docker-machine ip $PLAYGROUND_NAME-swarm1):3376" && \
    echo && \
    echo "To connect to the swarm run:" && \
    echo 'eval $(docker-machine env --swarm docker-playground-swarm1)'
    echo 'eval $(docker-machine env --swarm '$PLAYGROUND_NAME'-swarm1)'
    }


    @@ -169,6 +196,11 @@ start)
    stop)
    stop
    ;;
    restart)
    stop
    start
    details
    ;;
    status)
    status
    details
  2. Ryan C Koch revised this gist Nov 30, 2015. 1 changed file with 2 additions and 2 deletions.
    4 changes: 2 additions & 2 deletions docker-playground.sh
    Original file line number Diff line number Diff line change
    @@ -19,7 +19,7 @@ usage ()

    create ()
    {
    echo "##### STARTING LOCAL-SERVICE-EMULATOR #####"
    echo "##### STARTING DOCKER-PLAYGROUND #####"

    echo "### STARTING NODE docker-playground-consul ###" && \
    docker-machine create -d virtualbox docker-playground-consul && \
    @@ -116,7 +116,7 @@ create ()
    -v /var/run/docker.sock:/tmp/docker.sock \
    gliderlabs/registrator:master \
    consul://$(docker-machine ip docker-playground-swarm2):8500 && \
    echo "##### LOCAL-SERVICE-EMULATOR STARTED #####"
    echo "##### DOCKER-PLAYGROUND STARTED #####"
    }

    start ()
  3. Ryan C Koch created this gist Nov 30, 2015.
    182 changes: 182 additions & 0 deletions docker-playground.sh
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,182 @@
    #!/bin/bash

    # Description: This script spins up a multi node Docker Swarm w/ Docker
    # Networking and Consul discovery w/ Registrator
    # Author: Ryan C Koch
    # [email protected]
    # 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 LOCAL-SERVICE-EMULATOR #####"

    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 "##### LOCAL-SERVICE-EMULATOR 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