Skip to content

Instantly share code, notes, and snippets.

@rwillians
Created July 14, 2017 18:57
Show Gist options
  • Save rwillians/28cd9d174438016533dcde093490087c to your computer and use it in GitHub Desktop.
Save rwillians/28cd9d174438016533dcde093490087c to your computer and use it in GitHub Desktop.
Local Swarm Cluster
#!/bin/bash
forceflag='false'
while getopts 'f' flag; do
case "${flag}" in
f) forceflag='true' ;;
esac
done
if [ ! ${forceflag} == 'true' ]; then
echo "This actions is irreversible, you should be really careful!"
echo "If you really want to destroy your cluster, run this command with '-f'."
exit 1
fi
##
# DESTROYING SERVICES
##
printf "\nDESTROYING SERVICES...\n======================\n\n"
for service in $(docker service ls -q); do
docker service rm > /dev/null 2>&1
echo "Service #${service} destroyed"
done
printf "\n\n"
##
# DESTROYING WORKERS
##
printf "\nDESTROYING WORKERS...\n=====================\n\n"
SWARM_MASTER_NAME=$(docker info --format "{{.Name}}")
SWARM_MASTER_ID=$(docker node ls --filter="name=${SWARM_MASTER_NAME}" -q)
for node in $(docker node ls -q); do
if [ ${node} == ${SWARM_MASTER_ID} ]; then
echo "Skipping master..."
continue
fi
docker node rm --force ${node} > /dev/null 2>&1
docker rm --force ${node} > /dev/null 2>&1
echo "Worker ${node} destroyed"
done
printf "\n\n"
##
# REMOVING UNECESSARY RESOURCES
##
printf "\nREMOVING UNECESSARY RESOURCES...\n================================\n\n"
docker container prune -f > /dev/null 2>&1
echo "Cleaned containers"
docker image prune -f > /dev/null 2>&1
echo "Cleaned images"
docker network prune -f > /dev/null 2>&1
echo "Cleaned networks"
docker volume prune -f > /dev/null 2>&1
echo "Cleaned volumes"
printf "\n"
##
# LEAVING THE CLUSTER
##
printf "\nLEAVING THE CLUSTER...\n======================\n\n"
docker swarm leave -f
printf "\n"
#!/bin/bash
if [ -z INFRA_WORKER_NODES ]; then
INFRA_WORKER_NODES=3
echo "Missing \"INFRA_WORKER_NODES\" environment variable, set to '$INFRA_WORKER_NODES' by default!"
fi
##
# INITIATING SWARM MODE
##
printf "\nINITIATING DOCKER SWARM NODE...\n===============================\n\n"
docker node ls 2> /dev/null | grep "Leader"
if [ $? -ne 0 ]; then
docker swarm init > /dev/null 2>&1
fi
sleep 5
SWARM_MASTER=$(docker info --format "{{.Swarm.NodeAddr}}")
SWARM_TOKEN=$(docker swarm join-token -q worker)
echo "Swarm master: $SWARM_MASTER"
echo "Token: $SWARM_TOKEN"
printf "\n\n"
##
# CREATING DOCKER PRIVATE REGISTRY SERVICE
##
printf "CREATING DOCKER PRIVATE REGISTRY SERVICE...\n===========================================\n\n"
bash -c "cd docker-registry & docker stack deploy --compose-file docker-compose.yml docker-registry" > /dev/null 2>&1
echo " Registry running at: http://$SWARM_MASTER:5000"
echo " http://localhost:5000"
echo " Registry debug running at: http://$SWARM_MASTER:5001"
echo " http://localhost:5001"
echo "Web interface available at: http://$SWARM_MASTER:6000"
echo " http://localhost:6000"
printf "\n\n"
##
# CREATING WORKERS
##
printf "CREATING WORKER NODES...\n========================\n\n"
for i in $(seq "${INFRA_WORKER_NODES}"); do
echo "Removing older instance of #worker-${i}..."
docker node rm --force $(docker node ls --filter "name=worker-${i}" -q) > /dev/null 2>&1
docker rm --force $(docker ps -q --filter "name=worker-${i}") > /dev/null 2>&1
echo "Creating node #worker-${i}..."
docker run -d --privileged --name worker-${i} --hostname=worker-${i} \
-p ${i}2375:2375 \
-p ${i}5000:5000 \
-p ${i}5001:5001 \
-p ${i}5601:5601 \
docker:rc-dind --registry-mirror http://${SWARM_MASTER}:5000
echo "Joining #worker-${i} to the cluster..."
docker --host=localhost:${i}2375 swarm join --token ${SWARM_TOKEN} ${SWARM_MASTER}:2377
printf "\n"
done
printf "\n"
##
# CREATING PORTAINER SERVICE
##
printf "CREATING PORTAINER SERVICE...\n=============================\n\n"
bash -c "cd portainer && docker stack deploy --compose-file docker-compose.yml portainer" > /dev/null 2>&1
echo "Portainer (Docker Swarm web interface) running at: http://$SWARM_MASTER:9000"
echo " http://localhost:9000"
printf "\n"
##
# CREATING VERDACCIO (NPM PRIVATE REGISTRY)
##
printf "CREATING VERDACCIO (NPM PRIVATE REGISTRY)...\n============================================\n\n"
if [ ! -f ./config/htpasswd ]; then
echo "File \"htpasswd\" does not exists, creating empty file..."
echo " " > ./npm-registry/config/htpasswd
printf "\n"
fi
bash -c "cd npm-registry && docker stack deploy --compose-file docker-compose.yml npm-registry"
echo "Verdaccio (private NPM Registry) running at: http://$SWARM_MASTER:4873"
echo " http://localhost:4873"
printf "\n"
##
# CREATING CONCOURSE SERVICE
##
printf "CREATING CONCOURSE-CI SERVICE...\n================================\n\n"
bash -c "cd concourse-ci && bin/create-secrets && INFRA_CONCOURSE_WEB_PORT=$INFRA_CONCOURSE_WEB_PORT docker stack deploy --compose-file docker-compose.yml concourse-ci" > /dev/null 2>&1
echo "Concourse-CI running at: http://$SWARM_MASTER:$INFRA_CONCOURSE_WEB_PORT"
echo " http://localhost:$INFRA_CONCOURSE_WEB_PORT"
printf "\n"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment