Deploying services over docker swarm

Kundan
4 min readAug 21, 2020

--

Learn how to deploy app over the swarm cluster

What is a Docker Swarm?

A Docker Swarm is a group of either physical or virtual machines that are running the Docker application and that have been configured to join together in a cluster. Once a group of machines have been clustered together, you can still run the Docker commands that you’re used to, but they will now be carried out by the machines in your cluster. The activities of the cluster are controlled by a swarm manager, and machines that have joined the cluster are referred to as nodes.

What are Docker Swarm Nodes?

A docker swarm is comprised of a group of physical or virtual machines operating in a cluster. When a machine joins the cluster, it becomes a node in that swarm. The docker swarm function recognizes three different types of nodes, each with a different role within the docker swarm ecosystem:

Manager Node

The primary function of manager nodes is to assign tasks to worker nodes in the swarm. Manager nodes also help to carry out some of the managerial tasks needed to operate the swarm. Docker recommends a maximum of seven manager nodes for a swarm.

Leader Node

When a cluster is established, the Raft consensus algorithm is used to assign one of them as the “leader node”. The leader node makes all of the swarm management and task orchestration decisions for the swarm. If the leader node becomes unavailable due to an outage or failure, a new leader node can be elected using the Raft consensus algorithm.

Worker Node

In a docker swarm with numerous hosts, each worker node functions by receiving and executing the tasks that are allocated to it by manager nodes. By default, all manager modes are also worker nodes and are capable of executing tasks when they have the resources available to do so.

Prerequisite

Docker installed on your system/server. You can check it using:

docker --version

If you haven’t installed docker in your system yet. Please follow my previous article, “Deploy node.js web app on docker”.

NOTE: If you want to test swarm-cluster without purchasing any server, you have to visit following link:

https://labs.play-with-docker.com/

Creating Swarm cluster

By default, the swarm is in inactive form. You have to run the following command to activate swarm.

  • docker swarm init — advertise-addr <pub IP address>
Before activating
After activating

After activating the swarm there is a prompt appear like the following:

root@jv-web-nw-1:~# docker swarm init --advertise-addr <public ipaddress>Swarm initialized: current node (m1v1gdp0m2q71qrxe6b0m5e58) is now a manager.To add a worker to this swarm, run the following command:docker swarm join --token SWMTKN-1-5zlnd6luxfpc0gmlal1em3c9b97nbn0pn5z1oa8l79qmcrq3bo-2waeh0jjh5vy61midsblqp52k <ip address>:2377To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.root@jv-web-nw-1:~#

SSH on another server and paste the above-highlighted text. Now, current server is worker.

docker swarm join --token SWMTKN-1-5zlnd6luxfpc0gmlal1em3c9b97nbn0pn5z1oa8l79qmcrq3bo-2waeh0jjh5vy61midsblqp52k <ip address>:2377

Update node2 as manager

docker node update --role manager node2

We can update the role of another node from a manager node using the “docker node update — role” command.

To add a manager to this swarm, run the following command

docker swarm join-token manager

root@jv-redis-r1:~# docker swarm join-token managerTo add a manager to this swarm, run the following command:docker swarm join --token SWMTKN-1-0lmu652pnv8qjw6qvhe11wlkb2vtvtd9m2v9le8kke0plthq9v-1yprt6w0akz0m21do4183yape 206.189.136.211:2377

SSH on the server, you are looking for manager swarm and paste the above-generated link

Make sure you have docker installed on that server

Now, go to the first node and see all nodes using the following command

docker node ls

Create service with 3 replicas

docker service create --replicas 3 alpine ping 8.8.8.8

You can verify on any manager node using

docker service ls

You can run service replicas as you need

docker service create — name search — replicas 3 -p 9200:9200 elasticsearch:2

You can build your own docker image as a service.

docker service create — name testingapp -p 80:80 --network frontend --replicas 2 <docker image>Ex- docker service create --name express_test -p 80:3000  --replicas 3 kdsharma/testing-node

Restart changes with service

docker service update — image <Dockerhub user>/<image> <service name>

Scale the service in the swarm

docker service scale <SERVICE-ID>=<NUMBER-OF-TASKS>

--

--