4.3 KiB
Executable File
4.3 KiB
Executable File
📦 Docker Swarm Documentation
Comprehensive guide to managing a Docker Swarm cluster. This document includes core commands, workflows, and best practices for maintaining a healthy and operational environment.
📚 Table of Contents
- 🔧 Cluster Health & Manager Count
- 🚀 Example Workflow: Setting Up Nginx
- ⚙️ Cluster Initialization and Management
- 🖥️ Node Management
- 🛠️ Service Management
- 🔑 Join Tokens & Node Configuration
🔧 Cluster Health & Manager Count
A Docker Swarm cluster requires a majority of manager nodes to be functional for quorum.
Best Practice: Always maintain more than 50% manager nodes online. Losing quorum will render the cluster non-operational.
🚀 Example Workflow: Setting Up Nginx
Docker Swarm handles service deployment through several internal components:
- API – Receives service requests.
- Allocator – Determines resource allocation.
- Dispatcher – Assigns tasks to nodes.
- Scheduler – Places tasks on optimal nodes.
This process ensures resilient and efficient service distribution.
⚙️ Cluster Initialization and Management
🔹 Initialize Cluster
docker swarm init
🔹 Initialize with Specific Interface
docker swarm init --advertise-addr <ip-or-interface>
🔹 Join Existing Cluster
docker swarm join
🔹 Leave Cluster
docker swarm leave
🔹 Unlock a Manager Node
docker swarm unlock
🖥️ Node Management
🔸 List Nodes
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 a Node
docker node rm <node-id>
🔸 Promote to Manager
docker node promote <hostname-or-id>
🔸 Inspect a Node
docker node inspect <nodename>
🔸 Change Node Role
docker node update --role manager <nodename>
docker node update --role worker <nodename>
🔸 Change Node Availability
docker node update --availability active <nodename>
docker node update --availability pause <nodename>
docker node update --availability drain <nodename>
🔸 Add or Remove Labels
Add:
docker node update --label-add env=development <nodename>
docker node update --label-add env=testing <nodename>
Remove:
docker node update --label-rm env= <nodename>
docker node update --label-rm env <nodename>
Use label constraints in service deployment:
deploy:
placement:
constraints:
- node.labels.env == development
🛠️ Service Management
🔹 Show Tasks on a Node
docker node ps
🔹 List All Services
docker service ls
🔹 Create a New Service
docker service create --name <service-name> <image-name>
🔹 Scale a Service
docker service scale <service-name>=<replica-count>
Example:
docker service scale nginx=5
🔹 Inspect a Service
docker service inspect <service-name>
🔹 Create Service with Replicas, Env Vars, and Port Mapping
docker service create \
--name <service-name> \
--replicas <count> \
--env <ENV_VAR=value> \
--publish <host-port>:<container-port> \
<image-name>
Example:
docker service create \
--name nginx \
--replicas 3 \
--env MY_ENV_VAR=value \
--publish 8080:80 \
nginx
🔑 Join Tokens & Node Configuration
Securely add nodes to your Swarm using join tokens.
🔹 Get Worker Token
docker swarm join-token worker
🔹 Get Manager Token
docker swarm join-token manager