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/run("Run a Container") docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/start("Start Container") docker/ContainerOperationsGroup -.-> docker/stop("Stop Container") docker/ContainerOperationsGroup -.-> docker/restart("Restart Container") docker/ContainerOperationsGroup -.-> docker/create("Create Container") docker/NetworkOperationsGroup -.-> docker/network("Manage Networks") docker/DockerfileGroup -.-> docker/build("Build Image from Dockerfile") subgraph Lab Skills docker/run -.-> 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/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/restart -.-> lab-411561{{"How to join a worker node to a Docker Swarm cluster"}} docker/create -.-> 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.