What is Docker Swarm: Features and Working

Before the inception of Docker, developers predominantly relied on virtual machines. But unfortunately, virtual machines lost their popularity as it was proven to be less efficient. Docker was later introduced and it replaced VMs by allowing developers to solve their issues efficiently and effectively.

In this article, you will learn the following:

  • What is Docker Swarm?
  • Swarm mode key concepts
  • How does Docker Swarm work?
  • Kubernetes vs. Docker Swarm
  • Why do we use Docker Swarm?

Before getting started with the Docker Swarm article, we need to first understand Docker as a platform.

First, let’s dive into what Docker is.

What is Docker and Docker Container?

Docker is a tool used to automate the deployment of an application as a lightweight container so that the application can work efficiently in different environments.

docker

Docker container is a lightweight software package that consists of the dependencies (code, frameworks, libraries, etc.) required to run an application.

 

We can use Docker Swarm to make Docker work across multiple nodes, allowing them to share containers with each other. It's an environment where you can have various Docker images running on the same host operating system. 

DevOps Engineer Master's Program

Bridge between software developers and operationsExplore Course
DevOps Engineer Master's Program

What is Docker Swarm?

Docker Swarm is an orchestration management tool that runs on Docker applications. It helps end-users in creating and deploying a cluster of Docker nodes.

swarm

Each node of a Docker Swarm is a Docker daemon, and all Docker daemons interact using the Docker API. Each container within the Swarm can be deployed and accessed by nodes of the same cluster. 

docker-os

There are five critical elements within a doctor environment:

  1. Docker container 
  2. Docker daemon
  3. Docker images 
  4. Docker client 
  5. Docker registry 

Consider an environment having Docker containers as shown:

docker-containers

If one of the containers fails, we can use the Swarm to correct that failure.

docker-swarm

Docker Swarm can reschedule containers on node failures. Swarm node has a backup folder which we can use to restore the data onto a new Swarm. 

docker-daemon

DevOps Career Guide

A Guide to Becoming A DevOps EngineerGet Your Copy
DevOps Career Guide

Features of Docker Swarm

Some of the most essential features of Docker Swarm are:

  • Decentralized access: Swarm makes it very easy for teams to access and manage the environment 
  • High security: Any communication between the manager and client nodes within the Swarm is highly secure 
  • Autoload balancing: There is autoload balancing within your environment, and you can script that into how you write out and structure the Swarm environment 
  • High scalability: Load balancing converts the Swarm environment into a highly scalable infrastructure
  • Roll-back a task: Swarm allows you to roll back environments to previous safe environments

Swarm Mode Key Concepts

Service and Tasks

  • Docker containers are launched using services. 
  • Services can be deployed in two different ways - global and replicated.

replicated

Global And Replicated Service

  • Global services are responsible for monitoring containers that want to run on a Swarm node. In contrast, replicated services specify the number of identical tasks that a developer requires on the host machine.
  • Services enable developers to scale their applications.
  • Before deploying a service in Swarm, the developer should implement at least a single node.
  • Services can be used and accessed by any node of the same cluster.
  • A service is a description of a task, whereas a task performs the work.
  • Docker helps a developer in creating services, which can start tasks. However, when a task is assigned to a node, the same task cannot be attributed to another node.

Node

  • A Swarm node is an instance of the Docker engine. 
  • It is possible to run multiple nodes on a single server. But in production deployments, nodes are distributed across various devices.

How Does Docker Swarm Work?

In Swarm, containers are launched using services. A service is a group of containers of the same image that enables the scaling of applications. Before you can deploy a service in Docker Swarm, you must have at least one node deployed. 

There are two types of nodes in Docker Swarm:

  1. Manager node. Maintains cluster management tasks 
  2. Worker node. Receives and executes tasks from the manager node

Consider a situation where a manager node sends out commands to different worker nodes. 

manager-node.

The manager node knows the status of the worker nodes in a cluster, and the worker nodes accept tasks sent from the manager node. Every worker node has an agent that reports on the state of the node's tasks to the manager. This way, the manager node can maintain the desired state of the cluster. 

The worker nodes communicate with the manager node using API over HTTP. In Docker Swarm, services can be deployed and accessed by any node of the same cluster. While creating a service, you'll have to specify which container image you're going to use. You can set up commands and services to be either global or replicated: a global service will run on every Swarm node, and on a replicated service, the manager node distributes tasks to worker nodes. 

Now a question may arise: don't task and service refer to the same thing? The answer is no. 

A service is a description of a task or the state, whereas the actual task is the work that needs to be done. Docker enables a user to create services that can start tasks. When you assign a task to a node, it can't be assigned to another node. It is possible to have multiple manager nodes within a Docker Swarm environment, but there will be only one primary manager node that gets elected by other manager nodes. 

Therefore, the working of the Swarm can be summarized as follows:

managernode-workernode      

A service is created based on the command-line interface. The API that we connect in our Swarm environment allows us to do orchestration by creating tasks for each service. The task allocation will enable us to allocate work to tasks via their IP address. The dispatcher and scheduler assign and instruct worker nodes to run a task. The Worker node connects to the manager node and checks for new tasks. The final stage is to execute the tasks that have been assigned from the manager node to the worker node.

Kubernetes vs. Docker Swarm

The table below illustrates the differences between Kubernetes vs. Docker Swarm:

Features

Kubernetes

Docker Swarm

Installation

Complex

Simple

Load Balancing

Manual intervention is required for load balancing

Automated load balancing

Scalability

Scaling and deployment are comparatively slower

Containers are deployed much faster

Cluster

Difficult to set-up

Easy to set-up

Container Setup

Commands like YAML should be rewritten while switching platforms

A container can be easily deployed to different platforms

Logging and monitoring

Consists of built-in tools to manage both processes

Tools are not required for logging and monitoring

Availability

High availability when pods are distributed among the nodes

Increases availability of applications through redundancy

Data volumes

Shared with containers from the same pod

Can be shared with any container

Demo On Docker Swarm For Beginners

This tutorial requires two hosts, which can either be Virtual Machine or AWS EC2 .

The demo shows how to build and deploy a Docker Engine, run Docker commands, and install Docker Swarm.

Prerequisites:

  • Ubuntu 64-bit operating system
  • An ubuntu  account with Sudo privileges
  • Command-line terminal
  • Docker software repositories (optional)

Step 1: Update Software Repositories

Run the following command on the terminal:

sudo apt-get update

Step 2: Uninstall Old Versions of Docker

Before proceeding, uninstall the old Docker software and use the following command:

sudo apt-get remove docker docker-engine docker.io

Step 3: Install Docker

To install Docker on Ubuntu,  run the following command: 

sudo apt install docker.io

Step 4: Set-up Docker

Set-up and run Docker service by entering the following commands in the terminal window:

sudo systemctl start docker

sudo systemctl enable docker

Step 5: Verify Docker Version

To check the installed Docker version, enter the following command:

sudo docker --version

Step 6: Run Docker Container

To run a Docker container, it’s important to pull a Docker Image (such as MySQL) from Docker Hub.

sudo docker pull mysql

sudo docker run -d -p0.0.0.0:80:80 mysql:latest

Now, Docker pulls the latest MySQL image from the hub.

List down all the available Docker images on your machine by using the following command:

sudo docker ps -a

Step 7: Create Swarm 

Here, create a cluster with the IP address of the manager node.

sudo Docker Swarm init --advertise-addr 192.168.2.151

Subsequently, you should see the following output:

Manager Node

This means that the manager node is successfully configured.

Now, add worker node by copying the command of the “swarm init” and paste the output onto the worker node:

sudo Docker Swarm join --token SWMTKN-1- xxxxx

Your worker node is also created if you see the following output:

Worker Node

Now, go back to the manager node and execute the following command to list the worker node: 

sudo docker node ls

Here, you must see the worker node in the following output:

b/swarm-cluster

Swarm Cluster - Docker Swarm

The above image shows you have created Swarm Cluster successfully. Now, launch the service in Swarm Mode.

Go to your the manager node and execute the command below to deploy a service:

sudo docker service create --name helloworld alpine ping docker.com

By executing the above command, you can access the helloworld file from the remote system. 

To see the output, you can check the services with the following command: 

sudo docker service ls 

Finally, you should be able see the following output:

service

Service Created - Docker Swarm

And that’s it! Well done, you have successfully installed and configured the Swarm cluster on Ubuntu 16.04. Also, whenever required, you can effortlessly scale your application with no performance issues.

Learn the core Docker technologies like Docker swarm, containers, docker compose, and more with the Docker Certified Associate (DCA) Certification Training Course. Enroll now!

Conclusion

This brings us to the conclusion of the Docker Swarm article. Here, we learned what Docker and Docker Swarm are, along with Swarm mode key concepts and how Docker Swarm works. We also explored Kubernetes vs. Docker Swarm, and why we use Docker Swarm. In the end, we also saw a case study on ‘How to set up Swarm in the Docker ecosystem’. Do you have any questions? Please feel free to put it in the comments section of this article, our experts will get back to you at the earliest.

How can Simplilearn Enhance Your Knowledge of Docker?

Broad understanding of container concepts like Docker is one of the most critical skills that a DevOps engineer should have. You can add this credential to your skillset by enrolling in Simplilearn's Docker Certified Associate (DCA) Certification Training Course. Get hands-on experience with Docker Compose and Docker hub, create flexible, customizable environments and networks, and much more with this comprehensive training course using Simpilearn's unique Blended Learning approach.   

About the Author

SimplilearnSimplilearn

Simplilearn is one of the world’s leading providers of online training for Digital Marketing, Cloud Computing, Project Management, Data Science, IT, Software Development, and many other emerging technologies.

View More
  • Disclaimer
  • PMP, PMI, PMBOK, CAPM, PgMP, PfMP, ACP, PBA, RMP, SP, and OPM3 are registered marks of the Project Management Institute, Inc.