Files
my-docs/Containerization & Orchestration/Docker/5-Docker-Swarm.md
2025-02-06 17:52:16 +03:30

4.9 KiB
Executable File

Docker Swarm Documentation

This guide covers key commands and workflows for managing a Docker Swarm cluster. It includes information on initializing the cluster, node management, service management, and best practices to ensure your cluster remains operational.


Table of Contents

  1. Cluster Health & Manager Count
  2. Example Workflow: Setting Up Nginx
  3. Cluster Initialization and Management
  4. Node Management
  5. Service Management
  6. Join Tokens

Cluster Health & Manager Count

To maintain a healthy and functional Docker Swarm cluster, the number of manager nodes must exceed 50% of the total nodes. If the manager nodes fall below 51% of the cluster, the system will lose quorum and become non-operational. Always monitor your manager count to ensure high availability.


Example Workflow: Setting Up Nginx

When deploying services such as Nginx, the typical workflow in Docker Swarm is:

  1. API: Handle incoming requests.
  2. Allocator: Distribute workload to available nodes.
  3. Dispatcher: Manage task assignments.
  4. Scheduler: Ensure tasks run on the optimal nodes.

This workflow ensures that your service is efficiently distributed and scaled across the cluster.


Cluster Initialization and Management

Create Cluster

Initialize a new Docker Swarm cluster:

docker swarm init

This command sets up the current node as the manager of a new cluster.

Create Cluster with a Specific Interface

Specify an IP address or interface name when initializing the cluster:

docker swarm init --advertise-addr <ip or interface name>

This ensures that the node advertises the correct network interface for other nodes to join.

Join Cluster

Add a node to an existing Docker Swarm cluster:

docker swarm join

Leave Cluster

Remove a node from the cluster:

docker swarm leave

Unlock Locked Manager

Unlock a manager node that has been locked:

docker swarm unlock

Node Management

List Nodes

View the status and details of all nodes in your cluster:

docker node ls

Example Output:

ID                            HOSTNAME   STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
8yw8jrjeqczaci0qkuy060g09 *   docker-1   Ready     Active         Leader           24.0.5
v4gvf7xenw0izmxgvhr6hb2rj     docker-2   Ready     Active                          24.0.5
kd3ujmt1ey3pw6v9189fouxfa     docker-3   Ready     Active         Reachable        24.0.5
tm1msy58ztcltt36rs1lb76p7     docker-4   Down      Active                          24.0.5

Remove Node

Remove a node from the cluster by specifying its ID:

docker node rm <node-id>

Example:

docker node rm tm1msy58ztcltt36rs1lb76p7

Promote Node to Manager

Upgrade a worker node to a manager node:

docker node promote <hostname or ID>

Example:

docker node promote v4gvf7xenw0izmxgvhr6hb2rj

This command promotes the specified node, enabling it to participate in cluster management decisions.


Service Management

Show Task Status on Cluster

Display the status of tasks running on each node:

docker node ps

List Services

List all services currently running in the cluster:

docker service ls

Create Service

Create a new service with the specified name and Docker image:

docker service create --name <service-name> <image-name>

Scale Service

Adjust the number of replicas for an existing service:

docker service scale <service-name>=<replica-count>

Example:

docker service scale nginx=5

This command scales the nginx service to 5 replicas.

Inspect Service

View detailed information about a specific service:

docker service inspect <service-name>

Create Service with Replicas and Environment Variables

Launch a new service with multiple replicas, environment variables, and port publishing:

docker service create --name <service-name> --replicas <replica-count> --env <env-variable> --publish <host-port>:<container-port> <image-name>

Example:

docker service create --name nginx --replicas 3 --env MY_ENV_VAR=value --publish 8080:80 nginx

This creates an nginx service with 3 replicas, sets the environment variable MY_ENV_VAR to value, and maps port 8080 on the host to port 80 in the container.


Join Tokens

To securely add new nodes to the swarm, use the join tokens provided by Docker Swarm.

Get Worker Join Token

Display the token required for a node to join as a worker:

docker swarm join-token worker

Get Manager Join Token

Display the token required for a node to join as a manager:

docker swarm join-token manager