Building a Multi-Node Docker Swarm
1. Environment Setup
| Server Name | IP Address | Role |
|---|---|---|
| controller | 10.32.161.124 | Manager |
| worker1 | 10.32.161.125 | Worker |
| worker2 | 10.32.161.126 | Worker |
2. Docker CE Installation
Install Docker CE on all nodes following the official documentation.
3. Configure All Nodes
# Update Docker daemon configuration
cat > /etc/docker/daemon. <<EOF
{
"live-restore": false
}
EOF
# Restart Docker service
systemctl restart docker
# Configure firewall rules
firewall-cmd --permanent --add-port={2377/tcp,7946/tcp,7946/udp,4789/udp}
firewall-cmd --reload
# Install bash completion
dnf install bash-completion -y
</pre>
4. Initialize Swarm on Manager Node
# Initialize swarm on controller node
docker swarm init
5. Join Worker Nodes to Swarm
# On worker1 and worker2, execute the join command
docker swarm join \
--token SWMTKN-1-5yz0ag8l4mqj1gw20kl6fn4j38gj9rs4oefi6pgyuz40wsjotp-1tpgymi77j5idqanazqbpsmoj 10.32.161.124:2377
6. Verify Cluster Nodes
# Check node status on manager
docker node ls
7. Create Services and Deploy Applications
# Create a service with 2 replicas
docker service create --name web_service --replicas=2 -p 80:80 nginx:stable-alpine
# List services
docker service ls
# Inspect service details
docker service inspect web_service --pretty
# Check service tasks
docker service ps web_service
# Test service access
for i in {124..126}; do curl -I 10.32.161.$i; done
# Scale service to 3 instances
docker service scale web_service=3
# Verify updated service tasks
docker service ps web_service
8. Install Portainer CE
# Download deployment file
curl -L https://downloads.portainer.io/ce2-19/portainer-agent-stack.yml -o portainer-agent-stack.yml
# Deploy Portainer stack
docker stack deploy -c portainer-agent-stack.yml portainer
# Check stack services
docker stack ps portainer
Access Portainer at: http://Manager_IP:9000/
Default credentials: admin