Created
July 14, 2017 18:57
-
-
Save rwillians/28cd9d174438016533dcde093490087c to your computer and use it in GitHub Desktop.
Local Swarm Cluster
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 | |
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" |
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 | |
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