Skip to content

Instantly share code, notes, and snippets.

@dhsrocha
Last active November 6, 2021 22:48
Show Gist options
  • Save dhsrocha/a4848179b7868fc4183c01f89b6b8bd3 to your computer and use it in GitHub Desktop.
Save dhsrocha/a4848179b7868fc4183c01f89b6b8bd3 to your computer and use it in GitHub Desktop.
Docker Swarm local cluster
deploy() { # Creates a local self-contained deployment cluster.
ping() {
until docker exec -it "$1" docker stats --no-stream > /dev/null
do sleep .5; done
}
# Cleanup
if docker swarm ca > /dev/null 2>&1; then docker swarm leave -f; fi
docker ps -aqf name="$(basename "$PWD")" | xargs docker rm -fv > /dev/null
# OpenSSL TODO Apply https://linuxhandbook.com/docker-remote-access/
# Variables
readonly LEADER="$(basename "$PWD")-docker-leader"
readonly WORKER="$(basename "$PWD")-docker-worker"
readonly NETWORK="$(basename "$PWD")-cluster-network"
# Network
docker network create "$NETWORK" > /dev/null 2>&1 || true
# Leader
docker run --privileged --name "$LEADER" --network "$NETWORK" \
-e DOCKER_TLS_CERTDIR= -p 2375:2375 \
-h "$LEADER" -d docker:dind
ping "$LEADER"
docker -H localhost:2375 swarm init > /dev/null
readonly LEAD_IP=$(docker -H 'localhost:2375' info -f '{{.Swarm.NodeAddr}}')
readonly JOIN_TKN=$(docker -H 'localhost:2375' swarm join-token worker -q)
# Workers
for i in $(seq 3); do # TODO parameterize
docker run --privileged --name "$WORKER-$i" --network "$NETWORK" \
-h "$WORKER-$i" -d docker:dind
ping "$WORKER-$i"
docker exec -t "$WORKER-$i" \
docker swarm join --token "$JOIN_TKN" "$LEAD_IP":2377
done
docker -H 'localhost:2375' node ls
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment