4 台 2C2G 服务器逆袭!手把手教你用 Docker Swarm+Portainer 打造超便捷集群

在资源有限的情况下,如何最大化服务器性能?本文将基于 4 台 2C2G 服务器,带你通过 Docker Swarm 和 Portainer 构建高效集群,轻松实现资源整合与可视化管理。

在这里插入图片描述

一、集群规划与架构设计

1. 硬件配置

4 台 2C2G 服务器(示例 IP:192.168.1.100~192.168.1.103),操作系统统一是使用 Ubuntu 20.04 LTS

2. 角色分配

节点 IP 角色 职责描述
192.168.1.100 Swarm Manager 集群管理节点(主管理节点)
192.168.1.101 Swarm Worker 工作节点
192.168.1.102 Swarm Worker 工作节点
192.168.1.103 Swarm Worker 工作节点

3. 架构图

工作节点
管理节点
Swarm管理API
Swarm管理API
Swarm管理API
Portainer 9000端口
容器服务
容器服务
容器服务
192.168.1.101
192.168.1.102
192.168.1.103
192.168.1.100
客户端浏览器
应用容器

二、环境准备(所有节点)

1. 安装 Docker CE

\# 更新包索引

sudo apt update

\# 安装依赖工具

sudo apt install -y apt-transport-https ca-certificates curl gnupg-agent software-properties-common

\# 添加Docker官方GPG密钥

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

\# 添加Docker软件源

sudo add-apt-repository "deb \[arch=amd64] https://download.docker.com/linux/ubuntu \$(lsb\_release -cs) stable"

\# 安装Docker CE

sudo apt install -y docker-ce docker-ce-cli containerd.io

\# 启动Docker服务并设置开机自启

sudo systemctl enable --now docker

\# 允许当前用户管理Docker(非必须,建议使用sudo)

sudo usermod -aG docker \$USER

2. 检查 Docker 版本(需 >=1.12)

docker --version

\# 预期输出类似:Docker version 24.0.6, build ed223bc

3. 开放集群通信端口(所有节点)

sudo ufw allow 2377/tcp   # Swarm管理端口

sudo ufw allow 7946/tcp   # 容器网络通信(TCP)

sudo ufw allow 7946/udp   # 容器网络通信(UDP)

sudo ufw allow 4789/udp   # 容器overlay网络

sudo ufw allow 9000/tcp   # Portainer管理端口(仅管理节点)

sudo ufw enable

三、初始化 Swarm 集群(管理节点 192.168.1.100)

1. 初始化管理节点

docker swarm init --advertise-addr 192.168.1.100

执行后会输出工作节点加入命令,类似:

Swarm initialized: current node (abcdef123456) is now a manager.

To add a worker to this swarm, run the following command:

docker swarm join --token SWMTKN-1-4567890abcdef1234567890 192.168.1.100:2377

2. 查看集群节点状态

docker node ls

\# 预期输出:只有当前管理节点,状态为Ready,角色为Manager

四、添加工作节点(192.168.1.101~103)

在每台工作节点执行初始化时输出的加入命令:

docker swarm join --token SWMTKN-1-4567890abcdef1234567890 192.168.1.100:2377

验证节点加入

在管理节点再次执行:

docker node ls

\# 预期输出4个节点,1个Manager,3个Worker,状态均为Ready

五、部署 Portainer 可视化管理工具(管理节点)

1. 创建数据卷(持久化存储配置)

docker volume create portainer\_data

2. 运行 Portainer 服务

docker service create \\

  \--name portainer \\

  \--publish 9000:9000 \\

  \--constraint 'node.role == manager' \\

  \--mount type=bind,src=//var/run/docker.sock,dst=/var/run/docker.sock \\

  \--mount type=volume,src=portainer\_data,dst=/data \\

  portainer/portainer-ce:latest -H unix:///var/run/docker.sock

参数说明:

--constraint:确保 Portainer 仅在管理节点运行

--mount:挂载 Docker 套接字实现集群管理,数据卷存储配置

3. 访问 Portainer 界面

在浏览器输入:http://192.168.1.100:9000

首次访问设置管理员密码(建议强密码)

选择 “Connect to a Docker environment”

选择 “Swarm mode” 并点击 “Connect”

六、集群验证与基本操作

1. 查看节点状态(Portainer 界面)

进入 “Nodes” 页面,应显示 4 个节点,状态均为 Active

Manager 节点显示 “Leader” 标识,Worker 节点显示资源使用情况

2. 部署测试服务(Nginx 示例)

命令行部署(管理节点)
docker service create \\

  \--name web-service \\

  \--replicas 3 \\

  \--port 80:80 \\

  nginx:alpine
Portainer 界面部署

进入 “Stacks” 页面,点击 “Add stack”

使用 Docker Compose 格式部署(示例如下):

version: '3'

services:

  web:

    image: nginx:alpine

    ports:

      \- "80:80"

    deploy:

      replicas: 3

3. 验证负载均衡

访问任意节点 IP 的 80 端口,会轮询到不同 Nginx 容器实例

curl 192.168.1.100

curl 192.168.1.101

\# 输出应显示不同的容器ID(通过查看容器日志确认)

七、资源优化与最佳实践

1. 限制容器资源(防止单个容器耗尽节点资源)

docker service create \\

  \--name restricted-service \\

  \--replicas 2 \\

  \--limit-cpu 1.0 \        # 最多使用1个CPU核心

  \--limit-memory 1024m \   # 最多使用1GB内存

  \--reserve-cpu 0.5 \      # 至少保留0.5个CPU

  \--reserve-memory 512m \  # 至少保留512MB内存

  nginx:alpine

2. 节点标签分组(示例:区分数据库节点)

为特定节点添加标签
docker node update --label-add role=database 192.168.1.101
部署服务时指定标签约束
deploy:

  placement:

    constraints:

      \- node.labels.role == database

3. 监控集群资源

在 Portainer 界面的 “Monitoring” 页面可实时查看:

节点 CPU / 内存 / 磁盘使用情况

服务副本运行状态

容器日志实时监控

八、常见问题处理

1. 节点加入失败

检查防火墙是否开放 2377/7946/4789 端口

确认管理节点 IP 可被工作节点访问(ping 测试)

重新生成加入令牌:docker swarm join-token worker

2. Portainer 无法连接集群

检查/var/run/docker.sock权限是否正确

重启 Portainer 服务:docker service rm portainer && 重新执行部署命令

3. 服务调度不均衡

检查节点资源使用情况(Portainer 监控页面)

添加资源约束或节点标签重新调度任务

九、总结

通过 4 台 2C2G 服务器搭建的 Docker Swarm 集群,配合 Portainer 可视化管理,实现了:

计算资源的集中管理与弹性分配

容器服务的高可用性与负载均衡

可视化的集群监控与便捷操作

此方案适用于中小规模微服务架构、分布式应用测试环境或轻量级生产集群。后续可根据业务需求扩展节点数量,通过 Swarm 的动态调度能力灵活分配资源。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐