Requirements: Docker 1.12, Docker machine and Virtualbox
# create 3 nodes for our swarm cluster (one master and 2 slaves)
docker-machine create -d virtualbox swmaster
docker-machine create -d virtualbox swnode1
docker-machine create -d virtualbox swnode2
# swarm init
docker $(docker-machine config swmaster) swarm init --advertise-addr $(docker-machine ip swmaster)
docker $(docker-machine config swmaster) info
# swarm join
token=$(docker $(docker-machine config swmaster) swarm join-token worker -q)
docker $(docker-machine config swnode1) swarm join --token $token $(docker-machine ip swmaster):2377
docker $(docker-machine config swnode2) swarm join --token $token $(docker-machine ip swmaster):2377
# start service
docker $(docker-machine config swmaster) service ls
docker $(docker-machine config swmaster) service create --replicas 1 --name docker-demo -p 8080 mariolet/docker-demo:20
docker $(docker-machine config swmaster) service ls
docker $(docker-machine config swmaster) service ps docker-demo
docker $(docker-machine config swmaster) ps
docker $(docker-machine config swnode1) ps
# scale service
docker $(docker-machine config swmaster) service scale docker-demo=3
docker $(docker-machine config swmaster) service ps docker-demo
# rolling-update
docker $(docker-machine config swmaster) service ps docker-demo
docker $(docker-machine config swmaster) service update --image mariolet/docker-demo:21 docker-demo
docker $(docker-machine config swmaster) service ps docker-demo
docker $(docker-machine config swmaster) service ps docker-demo
# drain a node
docker $(docker-machine config swmaster) node ls
docker $(docker-machine config swmaster) node update --availability drain swnode1
# remove a service
docker $(docker-machine config swmaster) service rm docker-demo