温馨提示×

ubuntu docker集群搭建步骤

小樊
39
2025-11-06 18:16:56
栏目: 智能运维

Ubuntu Docker集群(Swarm模式)搭建步骤

1. 环境准备

  • 硬件要求:至少2台Ubuntu服务器(推荐22.04/24.04 LTS版本,x86-64架构),每台建议配置≥2核CPU、2GB内存(生产环境需更高配置)。
  • 网络要求:所有节点配置静态IP,确保节点间网络互通(可通过ping命令测试);关闭防火墙或放行2377/tcp(Swarm管理端口)、7946/tcp/udp(节点通信端口)、4789/udp(覆盖网络端口)
  • 主机名配置:每台节点的/etc/hostname需设置唯一名称(如manager-nodeworker-node1),并通过/etc/hosts文件添加集群内主机名解析(如192.168.1.10 manager-node)。

2. 安装Docker Engine

在所有节点上执行以下命令安装最新版Docker:

# 更新软件包索引
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 gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 添加Docker软件源(替换为当前Ubuntu版本,如22.04)
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 更新软件包索引并安装Docker
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io
# 启动Docker并设置开机自启
sudo systemctl start docker
sudo systemctl enable docker
# 验证安装(输出"Hello from Docker!"则成功)
sudo docker run hello-world

3. 初始化Docker Swarm集群

在**管理节点(manager-node)**上执行以下命令初始化Swarm:

# 初始化Swarm,指定管理节点IP(替换为实际静态IP)
sudo docker swarm init --advertise-addr 192.168.1.10

执行后会输出工作节点加入命令(含Token)和管理节点加入命令(用于扩展管理节点):

To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 192.168.1.10:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

4. 加入工作节点到集群

在**工作节点(worker-node1、worker-node2等)**上,复制管理节点初始化输出的docker swarm join命令并执行:

# 示例(替换为实际Token和管理节点IP)
docker swarm join --token SWMTKN-1-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 192.168.1.10:2377

执行成功后,工作节点会自动连接到管理节点。

5. 验证集群状态

回到管理节点,执行以下命令查看集群节点列表:

sudo docker node ls

正常输出应包含1个管理节点(STATUS为Leader多个工作节点(STATUS为Ready,例如:

ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
xxxxxxxxxxxxxx... *           manager-node        Ready               Active              Leader              24.0.5
yyyyyyyyyyyyyy...             worker-node1        Ready               Active                                  24.0.5
zzzzzzzzzzzzzz...             worker-node2        Ready               Active                                  24.0.5

6. 部署服务到集群

使用docker service create命令在集群中部署服务(以Nginx为例,创建3个副本):

sudo docker service create --name my-nginx --replicas 3 -p 8080:80 nginx:latest
  • --name:服务名称(自定义);
  • --replicas:副本数(指定服务运行的容器数量);
  • -p 8080:80:将节点的8080端口映射到容器的80端口(外部访问需通过管理节点IP:8080)。

7. 查看服务状态

  • 查看服务详情(包括副本分布、运行状态):
    sudo docker service ps my-nginx
    
  • 查看服务日志:
    sudo docker service logs -f my-nginx
    
  • 访问服务:在浏览器输入http://<管理节点IP>:8080,若看到Nginx欢迎页面则说明服务部署成功。

8. 扩缩容服务

如需调整服务副本数(如将Nginx副本从3个扩展到5个),执行以下命令:

sudo docker service scale my-nginx=5

执行后,Swarm会自动调度新增的2个副本到集群中的工作节点。可通过docker service ps my-nginx查看副本分布。

9. (可选)添加更多管理节点

如需提升集群高可用性,可添加更多管理节点:

  • 在管理节点上生成管理节点加入命令:
    sudo docker swarm join-token manager
    
  • 在新管理节点上执行输出的docker swarm join命令。

10. (可选)可视化集群(Portainer)

安装Portainer可视化工具,方便管理集群:

# 拉取Portainer镜像
sudo docker pull portainer/portainer-ce
# 创建Portainer数据卷(持久化数据)
sudo docker volume create portainer_data
# 启动Portainer容器(管理节点IP替换为实际IP)
sudo docker run -d -p 9000:9000 --name portainer --restart always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce

访问http://<管理节点IP>:9000,注册账号后即可通过Web界面管理集群。

0