# on leader node
docker swarm init
docker node ls
# on worker nodes
docker swarm join --token <TOKEN> <PRIVATE-IP>:2377
# retrieve join token if already initialized
docker swarm join-token worker
docker swarm join-token manager
docker service create \
--name web-app \
--publish published=80,target=3000 \
--replicas 3 \
web-app
docker service ls
# scale up
docker service scale web-app=5
# list replicas
docker service ps web-app
# backup
systemctl stop docker
tar czvf swarm.tgz /var/lib/docker/swarm/
scp swarm.tgz cloud_user@<PRIVATE-IP>:/home/cloud_user
# restore
tar zxvf swarm.tgz
cd var/lib/docker/
cp -rf swarm/ /var/lib/docker/
systemctl restart docker
docker swarm init --force-new-cluster
# on worker nodes
docker swarm leave
docker swarm join --token <TOKEN> <PRIVATE-IP-OF-BACKUP-SERVER>:2377
# prevent node from being selected for service deployments
docker node update --availability drain <NODE-ID>