Setting up a swarm cluster is really easy. All you need is a minimum of two nodes with OS of your choosing and having docker-ce installed on them both. Since I am mostly using debian I will be following the steps for installing docker-ce for ubuntu/debian since both of them are using aptitude as package manager.
Firstly we need to make sure that no docker was previously installed on the servers. Therefore we do some cleaning first:
# apt-get remove docker docker-engine docker.io containerd runc
Next step would be to install some packages that are needed to be able to easily install add the repository:
# apt-get update # apt-get install -y apt-transport-https ca-certificates curl gnupg-agent software-properties-common
Now that everything is ready and we got no errors it is time to add the docker repository key and the repository information to the nodes:
# curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add - OK # add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/debian \ $(lsb_release -cs) stable"
Usually after adding the repository via
add-apt-repository the OS will automatically reload the apt package list therefore the following step is optional:
< # apt-cache update />
# apt-cache update
After the package list was updated it is time to install the docker
# apt-get install -y docker-ce docker-ce-cli containerd.io
Now that we have docker installed on both of the nodes it is time to set up the docker swarm environment. On the master node you will initialize the swam
# docker swarm init --advertise-addr <IP address of the node> --listen-addr <IP address of the node>:2377
In case your nodes have two network interfaces one public and one private I recommend using the IP address of the private interface. That way your docker swarm will be listening on the private IP addresses only and be protected from attacks from the internet. When the node will be initialized you will be provided with a join command that you will be using on the worker node to join the cluster.
# docker swarm join --token <some very long token> <IP address of the node>:2377
You will have to copy the command generated by the master node and you can paste it into the slave. Once done you can check the cluster by running the following command on the master node:
# docker node ls ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION 8aq0aw2rjyfbai5hs9lwkbfeg * master Ready Active Leader 19.03.8 ah1jftle68d10urvb6omzvclk worker Ready Active 19.03.6
Now your swarm cluster is up and ready to take on some awesome projects.