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
- Cluster Health & Manager Count
- Example Workflow: Setting Up Nginx
- Cluster Initialization and Management
- Node Management
- Service Management
- 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:
- API: Handle incoming requests.
- Allocator: Distribute workload to available nodes.
- Dispatcher: Manage task assignments.
- 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