How to join a worker node to a Docker Swarm cluster?

DockerDockerBeginner
Practice Now

Introduction

This tutorial will guide you through the process of joining a worker node to a Docker Swarm cluster. By the end of this article, you will understand how to set up and manage a Docker Swarm environment, and how to seamlessly add new nodes to your cluster to scale your containerized applications.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("`Docker`")) -.-> docker/ContainerOperationsGroup(["`Container Operations`"]) docker(("`Docker`")) -.-> docker/NetworkOperationsGroup(["`Network Operations`"]) docker(("`Docker`")) -.-> docker/DockerfileGroup(["`Dockerfile`"]) docker/ContainerOperationsGroup -.-> docker/create("`Create Container`") docker/ContainerOperationsGroup -.-> docker/ps("`List Running Containers`") docker/ContainerOperationsGroup -.-> docker/restart("`Restart Container`") docker/ContainerOperationsGroup -.-> docker/run("`Run a Container`") docker/ContainerOperationsGroup -.-> docker/start("`Start Container`") docker/ContainerOperationsGroup -.-> docker/stop("`Stop Container`") docker/NetworkOperationsGroup -.-> docker/network("`Manage Networks`") docker/DockerfileGroup -.-> docker/build("`Build Image from Dockerfile`") subgraph Lab Skills docker/create -.-> lab-411561{{"`How to join a worker node to a Docker Swarm cluster?`"}} docker/ps -.-> lab-411561{{"`How to join a worker node to a Docker Swarm cluster?`"}} docker/restart -.-> lab-411561{{"`How to join a worker node to a Docker Swarm cluster?`"}} docker/run -.-> lab-411561{{"`How to join a worker node to a Docker Swarm cluster?`"}} docker/start -.-> lab-411561{{"`How to join a worker node to a Docker Swarm cluster?`"}} docker/stop -.-> lab-411561{{"`How to join a worker node to a Docker Swarm cluster?`"}} docker/network -.-> lab-411561{{"`How to join a worker node to a Docker Swarm cluster?`"}} docker/build -.-> lab-411561{{"`How to join a worker node to a Docker Swarm cluster?`"}} end

Introduction to Docker Swarm

Docker Swarm is a native clustering and orchestration solution for Docker containers. It allows you to manage a group of Docker hosts and deploy applications across them, providing high availability, load balancing, and scalability.

What is Docker Swarm?

Docker Swarm is a built-in feature of the Docker Engine that enables you to cluster multiple Docker hosts into a single, virtual Docker host. This allows you to manage and scale your containerized applications across multiple hosts, providing fault tolerance and high availability.

Key Concepts in Docker Swarm

  1. Swarm: A Swarm is a group of Docker hosts (physical or virtual) that are running the Docker Engine and have joined together to form a cluster.
  2. Node: A Node is a single Docker host that is part of a Swarm. Nodes can be either a Manager or a Worker.
  3. Manager Node: Manager Nodes are responsible for managing the state of the Swarm, scheduling tasks, and maintaining the desired state of the cluster.
  4. Worker Node: Worker Nodes are responsible for running the actual containers as directed by the Manager Nodes.
  5. Service: A Service is a declarative way of defining how an application should be deployed and scaled across the Swarm.
graph TD A[Docker Host] --> B[Docker Host] B[Docker Host] --> C[Docker Host] C[Docker Host] --> D[Docker Host] D[Docker Host] --> A[Docker Host] A --- E[Manager Node] B --- F[Worker Node] C --- G[Worker Node] D --- H[Worker Node]

Benefits of Docker Swarm

  • High Availability: Docker Swarm provides automatic load balancing and failover, ensuring that your applications are highly available.
  • Scalability: You can easily scale your applications up or down by adding or removing nodes to the Swarm.
  • Simplicity: Docker Swarm is a built-in feature of the Docker Engine, making it easy to set up and manage.
  • Integration: Docker Swarm integrates seamlessly with other Docker tools and services, such as Docker Compose and Docker Registry.

Setting up a Docker Swarm Cluster

Prerequisites

Before setting up a Docker Swarm cluster, ensure that you have the following:

  1. At least two Ubuntu 22.04 hosts (physical or virtual) with the Docker Engine installed.
  2. SSH access to the hosts.

Step 1: Initialize the Swarm

On one of the hosts, run the following command to initialize the Swarm:

docker swarm init --advertise-addr <HOST_IP_ADDRESS>

Replace <HOST_IP_ADDRESS> with the IP address of the host.

This command will output a join token that you'll use to add other nodes to the Swarm.

Step 2: Add Worker Nodes to the Swarm

On the other hosts, run the command provided by the previous step to join the Swarm as a Worker node:

docker swarm join --token <TOKEN> <HOST_IP_ADDRESS>:2377

Replace <TOKEN> with the token provided by the Swarm initialization, and <HOST_IP_ADDRESS> with the IP address of the Manager node.

Step 3: Verify the Swarm

Run the following command on the Manager node to view the nodes in the Swarm:

docker node ls

You should see the Manager node and the Worker nodes in the output.

Step 4: Deploy a Service

To test your Swarm setup, deploy a simple service:

docker service create --name nginx --publish 80:80 nginx

This will create a service named "nginx" and deploy it across the Swarm.

graph TD A[Manager Node] --> B[Worker Node] B[Worker Node] --> C[Worker Node] C[Worker Node] --> A[Manager Node] A -- "docker swarm init" --> D[Swarm] B -- "docker swarm join" --> D[Swarm] C -- "docker swarm join" --> D[Swarm] D -- "docker service create" --> E[Nginx Service]

Joining a Worker Node to the Swarm

Prerequisites

Before you can join a Worker node to the Swarm, ensure that you have the following:

  1. A running Docker Swarm cluster with at least one Manager node.
  2. SSH access to the host you want to join as a Worker node.

Step 1: Obtain the Join Command

On the Manager node, run the following command to get the join command for a Worker node:

docker swarm join-token worker

This will output a command similar to the following:

docker swarm join --token SWMTKN-1-49nj1cmql0jkz5s7p15g43pits9-8y0wywnrwwt7a4vox4vx9v68r 192.168.0.16:2377

Step 2: Join the Swarm as a Worker Node

On the host you want to join as a Worker node, run the command obtained in the previous step:

docker swarm join --token SWMTKN-1-49nj1cmql0jkz5s7p15g43pits9-8y0wywnrwwt7a4vox4vx9v68r 192.168.0.16:2377

This will join the host to the Swarm as a Worker node.

Step 3: Verify the Node Joined the Swarm

On the Manager node, run the following command to list the nodes in the Swarm:

docker node ls

You should see the new Worker node in the output.

graph TD A[Manager Node] --> B[Worker Node] B[Worker Node] --> C[Worker Node] C[Worker Node] --> A[Manager Node] A -- "docker swarm join-token worker" --> D[Join Command] B -- "docker swarm join" --> A[Manager Node]

By following these steps, you can easily join a new Worker node to your Docker Swarm cluster, expanding the capacity and resilience of your containerized applications.

Summary

In this Docker tutorial, you have learned how to set up a Docker Swarm cluster and join a worker node to it. By adding new nodes to your Swarm, you can easily scale your Docker-based applications and create a highly available, distributed environment. With the knowledge gained from this guide, you can now confidently manage and expand your Docker Swarm infrastructure to meet your growing business needs.

Other Docker Tutorials you may like